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

Java 多个不同父类引用的JPA子类,java,jpa,orm,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 @

我遇到了以下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;
}
A类{
@身份证
@生成值
私人长id;
@独身癖
私有集cSet;
}
B类{
@身份证
@生成值
私人长id;
@独身癖
私有集cSet;
}
C类{
@身份证
@生成值
私人长id;
}
我的一个想法是为C使用MappedSuperclass,并拥有两个扩展类,每个扩展类在a或B中引用。但是从面向对象的角度来看,这不是最好的方法,尽管我可以使用superclass类型来处理它们

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

谢谢,
Benjamin

如果不指定任何映射注释(即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)
A : id
B : id
C : id, a_id, b_id
如果要使用JoinColumn注释对每个集合进行注释,则可以选择:

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

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

这当然在中描述。

有什么问题?JPA并不禁止您以这种方式共享类。好吧,但我的问题是:JPA提供者(如Hibernate)如何将其映射到关系数据库中?无论如何,它都会为外部id添加一个传统列,但它会添加类似“父表名”的内容吗?或者映射是如何完成的?