有没有办法在Hibernate中使用注释创建复合键,而无需创建新的PK类(即@EmbeddedId)?
我的问题是,我有一个具有许多属性的抽象类CommonClass,我需要为许多实体类继承它。每个类都有不同类型的id,但它们都需要是一个具有CommonClass属性的复合键。 例如:
@MappedSuperclass
abstract class CommonClass {
@Id
int typed;
int a0;
int a1;
//many other attributes
}
@Entity
class EntityString extends CommonClass {
@Id
String id;
//ID need to be id+typed from CommonClass
//other attributes
}
@Entity
class EntityInteger extends CommonClass {
@Id
Integer id;
//ID need to be id+typed from CommonClass
//other attributes
}
那么,最好的方法是什么?
答案 0 :(得分:2)
以下休眠doc的第2.2.3.2.2节。
另一种可以说更自然的方法是将@Id放在多个上 我的实体的属性。这种方法仅由Hibernate支持 但不需要额外的可嵌入组件。
@Entity
class Customer implements Serializable {
@Id @OneToOne
@JoinColumns({
@JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
@JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
})
User user;
@Id String customerNumber;
boolean preferredCustomer;
}
@Entity
class User {
@EmbeddedId UserId id;
Integer age;
}
@Embeddable
class UserId implements Serializable {
String firstName;
String lastName;
}