?????? hibernate中一對一的關聯有兩種方式:
????? 主鍵關聯
????? 唯一外鍵關聯
??? 下面以一個人只能有一個身份證,一張身份證只能屬于一個人為例,分別說明這兩種的關聯方式。
???1)主鍵關聯方式
??? 主鍵關聯不需要額外的表字段;如果兩行是通過這種一對一關系相關聯的,那么這兩行就共享同樣的主關鍵字值。
?? Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
?"<hibernate-mapping>
?<class name="org.example.bean.Person" table="TPERSON">
??<id name="id" column="PERSON_ID">
???<generator class="increment"/>
??</id>
??<property name="age"/>
??<property name="firstname"/>
??<property name="lastname"/>
??<one-to-one name="card" class="org.example.bean.PersonCard"
???cascade="all" />
?</class>
</hibernate-mapping>
?? 對應的類:Person.java
public class Person implements Serializable {
?private long id;
?private long age;
?private String firstname;
?private String lastname;
?private PersonCard card;
}
???PersonCard.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
?"<hibernate-mapping>
?<class name="org.example.bean.PersonCard" table="TPERSONCARD">
??<id name="id" column="ID">
???<generator class="increment"/>
??</id>
??<property name="cardID"/>
??<property name="beginDate"/>
??<property name="endDate"/>
??<one-to-one name="person" class="org.example.bean.Person" constrained="true"/>
?</class>
</hibernate-mapping>
?? 對應的類:PersonCard.java
public class PersonCard {
?private long id;
?private String cardID;
?private String beginDate;
?private String endDate;
?private Person person;
}
?? 2)唯一外鍵關聯
?? 唯一外鍵關聯主要是一個外鍵和一個惟一關鍵字對應。
?? 下面是修改后的配置文件和對應的類。
?? Person.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
?"<hibernate-mapping>
?<class name="org.example.bean.Person" table="TPERSON">
??<id name="id" column="PERSON_ID">
???<generator class="increment"/>
??</id>
??<property name="age"/>
??<property name="firstname"/>
??<property name="lastname"/>
??<!-- one-to-one
???one person to one personcard
???-->
??<one-to-one name="card" class="org.example.bean.PersonCard"
???cascade="all-delete-orphan" property-ref="person" />
?</class>
</hibernate-mapping>
?? 對應的類:Person.java
public class Person implements Serializable {
?private long id;
?private long age;
?private String firstname;
?private String lastname;
?private PersonCard card;
}
?? PersonCard.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
?"<hibernate-mapping>
?<class name="org.example.bean.PersonCard" table="TPERSONCARD">
??<id name="id" column="ID">
???<generator class="increment"/>
??</id>
??<property name="cardID"/>
??<property name="beginDate"/>
??<property name="endDate"/>
??<!--
???one personCard to one person
???-->
??<many-to-one name="person" class="org.example.bean.Person"
???unique="true" not-null="true" >
???<column name="PERSON_ID" />
??</many-to-one>
?</class>
</hibernate-mapping>
?? 對應的類:PersonCard.java
public class PersonCard {
?private long id;
?private String cardID;
?private String beginDate;
?private String endDate;
?private Person person;
}
???