JoinTable丢失了

时间:2010-11-10 11:21:38

标签: java hibernate jpa

我有以下两个课程:

@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”-table应该存在,因为“A”和“B”都已经拥有了它们的主键。有没有办法解决这个问题,所以我可以让Hibernate在第二个数据库中保存连接表?

1 个答案:

答案 0 :(得分:0)

我猜这种情况正在发生,因为你正在使用代理对象。也就是说如果用new运算符创建A和B的实例然后调用persist,将创建Join表记录。但是你使用的是从entitymanager获得的对象(这些是代理对象)所以你必须合并对象,实体管理器将创建这个对象的新代理。