0
我有2個表之間的多對多關係,我用連接表定義。JPA加入不級聯的jUnit測試
//MyClassA
@ManyToMany
@JoinTable(name="A_TO_B",
[email protected](name="A_UUID"),
[email protected](name="B_UUID")
)
private List<MyClassB> classBs = new ArrayList<MyClassB>();
//MyClassB
@ManyToMany(mappedBy="classBs")
private List<MyClassA> classAs = new ArrayList<MyClassA>();
由於公司架構限制,連接表必須具有UUID列。
我有一個名爲associateItems
的DAO方法,它應該在連接列中插入一行。爲了測試所有內容,我在jUnit測試中執行以下操作。
myDao.associateItems(classAItem, classBItem);
classAItem = myDao.get(classAItem.getUuid());
classBItem = myDao.get(classBItem.getUuid());
assertEquals(1, classAItem.getClassBs().size());
assertEquals(1, classBItem.getClassAs().size());
該測試在最後2行失敗。
在我的DAO中,我嘗試了很多東西。我嘗試將classAItem
和classBItem
添加到彼此列表併合並它們。但是這會導致錯誤,因爲連接表對象沒有UUID。我試着創建連接表對象並堅持。但後來最後兩行測試失敗,因爲它認爲列表的大小爲0.
我一直堅持使用第二種解決方案(失敗優於錯誤)。
public void associateItems(MyClassA classAItem, MyClassB classBItem) {
//UUID populated in constructor
AToB association = new AToB(classAItem, classBItem);
entityManager.persist(association);
}
我知道連接表項正在插入到數據庫中。我還手動輸入了連接表項目,並確保在找到關聯時填充列表。所以測試只是在製作連接表項並關聯相關列表時遇到問題。
我已經嘗試搞亂級聯,獲取類型和沖洗。但我似乎無法找到讓測試通過的方法。
任何人都知道我需要做什麼來解決這個問題?