我在两个表之间有一个多对多的关系,这两个表是用一个连接表定义的。
//MyClassA
@ManyToMany
@JoinTable(name="A_TO_B",
joinColumns=@JoinColumn(name="A_UUID"),
inverseJoinColumns=@JoinColumn(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());这个测试在最后两行失败。
在我的刀中,我尝试了很多东西。我尝试将classAItem和classBItem添加到彼此的列表中,然后将它们合并。但这会导致错误,因为连接表对象没有UUID。我试着创建连接表对象并持久化它。但是测试的最后两行失败了,因为它认为列表的大小是0。
我一直坚持第二种解决方案(失败总比错误好)。
public void associateItems(MyClassA classAItem, MyClassB classBItem) {
//UUID populated in constructor
AToB association = new AToB(classAItem, classBItem);
entityManager.persist(association);
}我知道join表项正在插入到数据库中。我还手动输入了一个连接表项,并确保在找到关联时填充列表。因此,测试只是在生成连接表项,然后关联相关列表时出现了问题。
我已经尝试过处理级联、获取类型和刷新。但我似乎找不到让测试通过的方法。
有人知道我需要做些什么来解决这个问题吗?
发布于 2012-05-15 01:32:29
这实际上是DAO中get方法的问题。我添加了以下提示并测试运行,没有失败。
query.setHint(QueryHints.REFRESH, HintValues.TRUE);https://stackoverflow.com/questions/10587785
复制相似问题