2012-05-14 77 views
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中,我嘗試了很多東西。我嘗試將classAItemclassBItem添加到彼此列表併合並它們。但是這會導致錯誤,因爲連接表對象沒有UUID。我試着創建連接表對象並堅持。但後來最後兩行測試失敗,因爲它認爲列表的大小爲0.

我一直堅持使用第二種解決方案(失敗優於錯誤)。

public void associateItems(MyClassA classAItem, MyClassB classBItem) { 
    //UUID populated in constructor 
    AToB association = new AToB(classAItem, classBItem); 
    entityManager.persist(association); 
} 

我知道連接表項正在插入到數據庫中。我還手動輸入了連接表項目,並確保在找到關聯時填充列表。所以測試只是在製作連接表項並關聯相關列表時遇到問題。

我已經嘗試搞亂級聯,獲取類型和沖洗。但我似乎無法找到讓測試通過的方法。

任何人都知道我需要做什麼來解決這個問題?

回答

0

這實際上是DAO中的get方法的問題。我添加了下面的提示和測試運行沒有失敗。

query.setHint(QueryHints.REFRESH, HintValues.TRUE);