在Hibernate 参考文档中有一个与您的案例完全相似的示例。就在这个例子之前,你会找到解释。这是与您的问题匹配的示例(用户是表 A,客户是表 B):
@Entity
class Customer {
@EmbeddedId CustomerId id;
boolean preferredCustomer;
@MapsId("userId")
@JoinColumns({
@JoinColumn(name="userfirstname_fk", referencedColumnName="firstName"),
@JoinColumn(name="userlastname_fk", referencedColumnName="lastName")
})
@OneToOne User user;
}
@Embeddable
class CustomerId implements Serializable {
UserId userId;
String customerNumber;
//implements equals and hashCode
}
@Entity
class User {
@EmbeddedId UserId id;
Integer age;
}
@Embeddable
class UserId implements Serializable {
String firstName;
String lastName;
//implements equals and hashCode
}
注意:如果你有这两个表的代理标识符,那会简单得多。除非您被迫处理遗留模式,否则请帮自己一个忙并使用代理键。