0
我有一個composite_id_a(ID_1,ID_2,ID_3)在class_a,並希望使用composite_id_a在class_b作爲自己composite_id_b的一部分。在另一個組合鍵中使用組合鍵(@MapsId(「id_1,id_2,id_3」))?
的class_b有composite_id_a作爲其主鍵的一部分,也是它的外鍵。
如何映射外鍵在class_b中?
class_b:
public class B{
@EmbeddedId
private CompositeId_B composite_id_b;
// This does not work: I cannot use more properties in @MapsId
@MapsId("id_1, id_2, id_3")
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumns({
@JoinColumn(name="ID_1", referencedColumnName="ID_1"),
@JoinColumn(name="ID_2", referencedColumnName="ID_2"),
@JoinColumn(name="ID_3", referencedColumnName="ID_3")})
private A class_a;
}
類B的複合ID:
@Embeddable
public class Id_B{
@Column(name = "ID_1")
private Integer id_1;
@Column(name = "ID_2")
private Integer id_2;
@Column(name = "ID_3")
private Integer id_3;
@Column(name = "NAME")
private String name;
}
類A的複合ID:
@Embeddable
public class Id_A{
@Column(name = "ID_1")
private Integer id_1;
@Column(name = "ID_2")
private Integer id_2;
@Column(name = "ID_3")
private Integer id_3;
}
class_a:
public class A{
@EmbeddedId
private ID_A id_a;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
@JoinColumns({
@JoinColumn(name="ID_1", referencedColumnName="ID_1"),
@JoinColumn(name="ID_2", referencedColumnName="ID_2"),
@JoinColumn(name="ID_3", referencedColumnName="ID_3")})
private Set<B> b = new HashSet<>();
}
我不能使用這樣的事情,如下面的錯誤被拋出:
public class B{
@EmbeddedId
private CompositeId_B composite_id_b;
// This does not work: I cannot use more properties in @MapsId
@MapsId("composite_id_a")
@ManyToOne(fetch = FetchType.LAZY, optional = false)
@JoinColumns({
@JoinColumn(name="ID_1", referencedColumnName="ID_1"),
@JoinColumn(name="ID_2", referencedColumnName="ID_2"),
@JoinColumn(name="ID_3", referencedColumnName="ID_3")})
private A class_a;
}
B類的複合ID的另一個版本(不工作):
@Embeddable
public class Id_B{
@EmbeddedId
private CompositeId_A composite_id_a;
@Column(name = "NAME")
private String name;
}
13:55:46,010 ERROR [org.hibernate.annotations.common.AssertionFailure:42] HCANN000002: An assertion failure occurred (this may indicate a bug in Hibernate): org.hibernate.annotations.common.AssertionFailure: Declaring class is not found in the inheritance state hierarchy: entity.CompositeId_B
at org.hibernate.cfg.BinderHelper.getMappedSuperclassOrNull(BinderHelper.java:811)