ConcurrentModificationException: 当更新 spring 数据 jpa 父实体时
ConcurrentModificationException: When update spring data jpa parent entity
我有两个 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:
请指教!
我已经解决了问题
我在同一个事务中调用了以下方法:
@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);
}
我有两个 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:
请指教!
我已经解决了问题
我在同一个事务中调用了以下方法:
@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);
}