问题描述
将B
实体的主键定义为包含col_a
,col_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模型生成的。