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

Ben*_*rig 3 java orm jpa

我遇到了以下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;
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,本杰明

JB *_*zet 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)
Run Code Online (Sandbox Code Playgroud)

如果使用JoinColumn批注对每个集进行批注,则替代方法:

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

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

因此,您将拥有以下表格:

A : id
B : id
C : id, a_id, b_id
Run Code Online (Sandbox Code Playgroud)

这当然在文档中描述.