加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 08:48:44 所属栏目:Java 来源:网络整理
导读:我遇到了以下ORM问题: 我有两个A级和B级,他们都有一组C级: class A { @Id @GeneratedValue private long id; @OneToMany private SetC cSet;}class B { @Id @GeneratedValue private long id; @OneToMany private SetC cSet;}class C { @Id @GeneratedValu
我遇到了以下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中引用.但从面向对象的角度来看,这不是最好的方法,尽管我可以使用超类类型来工作跟他们.

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

谢谢,
本杰明

解决方法

如果未指定任何映射注释(即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中描述.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读