2012-05-14 45 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);