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 class="foreign"> <param name="property">identityCard</param> </generator> </id> <property name="personName" 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 class="assigned"/> </id> <property name="effectiveDate" 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属性用以添加外键约束。
主键关联映射之后的表结构:
两表通过相同的主键进行关联。