微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

带有部分组合主键的休眠外键

如何解决带有部分组合主键的休眠外键

我找到了解决此问题的两种方法

一个是一种解决方法,没有第二个那么整洁。

B实体的主键定义为包含col_acol_b和的复合键,col_c首先将假定为主键的内容定义为唯一约束。缺点是,从col_c概念上讲,该列实际上并不是主键的一部分。

@Entity
class A {
  @Id
  private int b;
  @Id
  private int c;
}

@Entity
@Table(uniqueConstraints = {@UniqueConstraint(columnNames = { "a", "b" }) })
class B {
  @Id
  private int a;

  @Id
  @ManyToOne(optional = false)
  @JoinColumns(value = {
          @JoinColumn(name = "b", referencedColumnName = "b"),
          @JoinColumn(name = "c", referencedColumnName = "c") })
  private A entityA;
}

第二个使用@EmbeddedId@MapsId注释,并且恰好做了我一开始想要做的事情。

@Entity
class A {
  @Id
  private int b;
  @Id
  private int c;
}

@Embeddable
class BKey {
  private int a;
  private int b;
}

@Entity
class B {
  @EmbeddedId
  private BKey primaryKey;

  @MapsId("b")
  @ManyToOne(optional = false)
  @JoinColumns(value = {
          @JoinColumn(name = "b", referencedColumnName = "b"),
          @JoinColumn(name = "c", referencedColumnName = "c") })
  private A entityA;
}

解决方法

我必须与Hibernate合作,但我不确定如何解决此问题,我有2个具有1..n关系的表,如下所示:

-------
TABLE_A
-------
col_b(pk)
col_c(pk)
[其他领域]

-------
TABLE_B
-------
col_a(pk)
col_b(pk)(fk TABLE_A.col_b)
col_c(fk TABLE_A.col_c)
[其他领域]

如何使用Hibernate进行管理?

我不知道如何声明将包含主键一部分的外键。

我的数据库架构是从Hibernate模型生成的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。