【问题标题】:ConcurrentModificationException: When update spring data jpa parent entityConcurrentModificationException:更新spring数据jpa父实体时
【发布时间】:2019-08-16 09:21:21
【问题描述】:

我有两个 jpa 实体:Family 和 FamilyMembers。

家庭:

@Entity
@Table(name = "family")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Family implements Serializable {

    @OneToMany(mappedBy = "family")
    private Set<FamilyMember> familyMembers = new HashSet<>();
}

家庭成员

@Entity
@Table(name = "family_member")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class FamilyMember implements Serializable {

    @ManyToOne()
    @JoinColumn(name="family_id")
    private Family family;
}

家庭实体是家庭成员的父实体。

当我尝试使用以下代码更新父实体“family”时,我的问题出现了:

familyRepository.save(family);

我得到了以下异常:

java.util.ConcurrentModificationException:

请指教!

【问题讨论】:

  • 请添加完整的堆栈跟踪
  • 您可以将 cascade = CascadeType.ALL 添加到您的父实体中,这样子实体也会随之保存
  • 非常感谢,伙计们。我已经解决了这个问题。请查看以下详细信息。

标签: spring hibernate spring-boot spring-data-jpa jhipster


【解决方案1】:

我已经解决了这个问题。

我在同一个事务中调用了以下方法:


    @Override
    @Transactional(readOnly = true)
    public Optional<EntityAuditConfiguration> findByEntityName(String entityName) {
        return entityAuditConfigurationRepository.findByEntityName(entityName);
    }

我更改了创建新spring事务的方法如下:

    @Override
    @Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
    public Optional<EntityAuditConfiguration> findByEntityName(String entityName) {
        return entityAuditConfigurationRepository.findByEntityName(entityName);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-09
    相关资源
    最近更新 更多