java JoinTable已丢失
我对以下两门课有兴趣:
@Entity
class A {
@Id
private aId;
@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
@JoinTable(name = "AB", joinColumns = @JoinColumn(name = "aId", referencedColumnName = "aId"), inverseJoinColumns = @JoinColumn(name = "bId", referencedColumnName = "bId"))
private Set<B> bSet;
}
@Entity
class B {
@Id
private bId;
}
我从一个数据库加载完整的对象结构,然后在第二个数据库上输入一个新的事务以再次持久化该结构。然而,“AB”表是空的。这很奇怪,因为“B”被持久化了,尽管我只显式地持久化了“A”。我已经检查过A-objects是否包含非空的B集,所以这不是问题
这让我得出结论,Hibernate认为“AB”-表应该存在,因为“A”和“B”已经有了它们的主键。有没有办法让Hibernate将联接表持久化到第二个数据库中
# 1 楼答案
我猜这是因为您正在使用代理对象。也就是说,若使用新运算符创建A和B的实例,然后调用persist,则将创建联接表记录。但您使用的是从entitymanager获得的对象(这些是代理对象),所以您必须合并对象,这样entitymanager才能创建此对象的新代理