有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    我猜这是因为您正在使用代理对象。也就是说,若使用新运算符创建A和B的实例,然后调用persist,则将创建联接表记录。但您使用的是从entitymanager获得的对象(这些是代理对象),所以您必须合并对象,这样entitymanager才能创建此对象的新代理