JPA子类由多个不同的父类引用

时间:2012-12-18 18:06:08

标签: java jpa orm

我遇到了以下ORM问题:

我有两个A和B类,他们都有一组C类:

class A {
  @Id
  @GeneratedValue
  private long id;

  @OneToMany
  private Set<C> cSet;
}

class B {
  @Id
  @GeneratedValue
  private long id;

  @OneToMany
  private Set<C> cSet;
}

class C {
  @Id
  @GeneratedValue
  private long id;
}

我有一个想法是使用MappedSuperclass for C并且有两个扩展类,每个都在A或B中引用。但从面向对象的角度来看,这不是最好的方法,尽管我可以使用超类类型为了与他们合作。

有没有更好的方法来实现这个模型?

谢谢, 本杰明

1 个答案:

答案 0 :(得分:7)

如果您没有指定任何映射注释(即JoinColumn或JoinTable),它将为每个关联使用连接表。

您将拥有以下表格:

A : id
B : id
C : id
A_C : a_id, c_id (where c_id is unique)
B_C : a_id, c_id (where c_id is unique)

使用JoinColumn批注注释每个集合的替代方法:

class A {
    @OneToMany
    @JoinColumn(name = "a_id")
    private Set<C> cSet;
}

class B {
   @OneToMany
   @JoinColumn(name = "b_id")
   private Set<C> cSet;
}

您将拥有以下表格:

A : id
B : id
C : id, a_id, b_id

这当然在the documentation中描述。