我必須處理循環依賴關係,我不能影響,我對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:完整性約束(...)侵犯 - 父鍵不發現
我可以通過從數據庫中刪除約束來規避此問題,但這不是我處理此問題的首選方式。