首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jUnit测试的JPA Join Not Cascading

jUnit测试的JPA Join Not Cascading
EN

Stack Overflow用户
提问于 2012-05-15 00:56:04
回答 1查看 444关注 0票数 0

我在两个表之间有一个多对多的关系,这两个表是用一个连接表定义的。

代码语言:javascript
复制
//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测试中执行以下操作。

代码语言:javascript
复制
myDao.associateItems(classAItem, classBItem);

classAItem = myDao.get(classAItem.getUuid());
classBItem = myDao.get(classBItem.getUuid());

assertEquals(1, classAItem.getClassBs().size());
assertEquals(1, classBItem.getClassAs().size());

这个测试在最后两行失败。

在我的刀中,我尝试了很多东西。我尝试将classAItemclassBItem添加到彼此的列表中,然后将它们合并。但这会导致错误,因为连接表对象没有UUID。我试着创建连接表对象并持久化它。但是测试的最后两行失败了,因为它认为列表的大小是0。

我一直坚持第二种解决方案(失败总比错误好)。

代码语言:javascript
复制
public void associateItems(MyClassA classAItem, MyClassB classBItem) {
    //UUID populated in constructor
    AToB association = new AToB(classAItem, classBItem); 
    entityManager.persist(association);
}

我知道join表项正在插入到数据库中。我还手动输入了一个连接表项,并确保在找到关联时填充列表。因此,测试只是在生成连接表项,然后关联相关列表时出现了问题。

我已经尝试过处理级联、获取类型和刷新。但我似乎找不到让测试通过的方法。

有人知道我需要做些什么来解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-15 01:32:29

这实际上是DAO中get方法的问题。我添加了以下提示并测试运行,没有失败。

代码语言:javascript
复制
query.setHint(QueryHints.REFRESH, HintValues.TRUE);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10587785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档