我用连接表定义的 2 个表之间存在多对多关系。
//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 列。
我有一个名为 DAO 的方法associateItems
,它应该在连接列中插入一行。为了测试所有内容,我在 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
and添加classBItem
到彼此的列表中并合并它们。但这会导致错误,因为连接表对象没有 UUID。我尝试创建连接表对象并将其持久化。但随后测试的最后两行失败,因为它认为列表的大小为 0。
我一直坚持第二种解决方案(失败总比错误好)。
public void associateItems(MyClassA classAItem, MyClassB classBItem) {
//UUID populated in constructor
AToB association = new AToB(classAItem, classBItem);
entityManager.persist(association);
}
我知道连接表项正在插入到数据库中。我还手动输入了一个连接表项,并确保在找到关联时填充列表。所以测试只是在制作连接表项然后关联相关列表方面存在问题。
我尝试过处理级联、获取类型和刷新。但我似乎找不到让测试通过的方法。
有人知道我需要做什么来解决这个问题吗?