我必须处理循环依赖关系,我不能影响,我对JPA相当陌生。持续循环依赖实体
所以一个实体有相同的实体的成员,我下定决心,通过:
@Entity
@Table("A")
public class A {
@ManyToMany
@JoinTable(name = "A_HAS_SUBAS",
joinColumns = {@JoinColumn(name = "A_ID")},
inverseJoinColumns = {@JoinColumn(name = "SUBA_ID")})
private Set<A> as;
}
当写入DB我有休眠似乎并不知道其中A首先必须坚持的问题。我试图通过从A中删除所有关系,写入数据库并通过休眠恢复关系来解决此问题。
这似乎工作,但似乎失败,如果A
没有SubAs
,这不符合我对这个问题的理解。所以我肯定在某个地方是错的。
没有关系的实体是由内部交易持续:
@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW)
private void immediatelySaveNewEntity(A entity) {
try {
if (!dao.entityExistsFromId((int) entity.getId())) { dao.save(entity); }
} catch (Exception e) {
e.printStackTrace();
}
}
因此,我得到一个
ORA-02291:完整性约束(...)侵犯 - 父键不发现
我可以通过从数据库中删除约束来规避此问题,但这不是我处理此问题的首选方式。