Hibernate 一对一主键关联映射
Hibernate one-to-one主键关联映射将两个关联对象的主键保持一致,因而关联在一起。
?
Person类
public class Person {private String id;private String personName;private String sex;private Date birthday;private IdentityCard identityCard;public String getId() {return id;}public void setId(String id) {this.id = id;}public String getPersonName() {return personName;}public void setPersonName(String personName) {this.personName = personName;}public Date getBirthday() {return birthday;}public void setBirthday(Date birthday) {this.birthday = birthday;}public IdentityCard getIdentityCard() {return identityCard;}public void setIdentityCard(IdentityCard identityCard) {this.identityCard = identityCard;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}}?
IdentityCard类
public class IdentityCard {private String cardNum;private Date effectiveDate;private Person person;public String getCardNum() {return cardNum;}public void setCardNum(String cardNum) {this.cardNum = cardNum;}public Date getEffectiveDate() {return effectiveDate;}public void setEffectiveDate(Date effectiveDate) {this.effectiveDate = effectiveDate;}public Person getPerson() {return person;}public void setPerson(Person person) {this.person = person;}}?
Person类的映射文件
<hibernate-mapping> <class name="com.woo.demo.hibernate.domain.Person" table="PERSON"> <id name="id" type="string"> <column name="ID" /> <generator column="person_name" type="string" length="128" not-null="true"/> <property name="sex" type="string" column="sex" length="1" not-null="true"/> <property name="birthday" column="birthday" type="date"/><one-to-one name="identityCard" cascade="all" constrained="true"/> </class></hibernate-mapping>
?
IdentityCard映射文件
<hibernate-mapping> <class name="com.woo.demo.hibernate.domain.IdentityCard" table="IDENTITYCARD"> <id name="cardNum" column="card_num" type="string" length="32"> <generator column="effective_date" type="date"/> <one-to-one name="person"></one-to-one> </class></hibernate-mapping>
?
? Person类使用IdentityCard的cardNum字段作为外键ID, 在配置时将Person类的主键生成形式设为foreign,然后传入param参数。这样Person类就会利用IdentityCard类的主键做为主键。
在one-to-one标签上加constrained属性用以添加外键约束。
主键关联映射之后的表结构:

?
两表通过相同的主键进行关联。