【Hibernate】——一對一映射

        好吧,一對一映射是我認爲最好理解的,正如我說的一個蘿蔔一個坑,或者實際一點的例子:一個人只有一個

身份證號:

            

         新建一個Person實體對象:

package com.bjpowernode.hibernate;
/**
 * 建立Person實體類
 * @author why_768
 *
 */
public class Person {
	private int id;
	private String name;
	private IdCard idCard;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public IdCard getIdCard() {
		return idCard;
	}
	public void setIdCard(IdCard idCard) {
		this.idCard = idCard;
	}
}

          配置Person.hbm.xml映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
	"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
	<class name="com.bjpowernode.hibernate.Person" table="t_person">
		<id name="id">
			<!-- 採用foreign生成策略,會取得關聯對象的標識 -->
			<generator class="foreign">
				<param name="property">idCard</param>
			</generator>
		</id>
		<property name="name"/>
		<!-- constrained=“true”表示,當前主鍵還是一個外鍵 	-->
		<one-to-one name="idCard" constrained="true"/>
	</class>
</hibernate-mapping>

          新建IdCard實體類:

package com.bjpowernode.hibernate;

public class IdCard {
	private int id;
	
	private String CardNo;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getCardNo() {
		return CardNo;
	}
	public void setCardNo(String cardNo) {
		CardNo = cardNo;
	}
}

         配置IdCard.hbm.xml映射文件:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.bjpowernode.hibernate.IdCard" table="t_idCard">
        <id name="id">
            <generator class="native"/>
        </id>
        <property name="cardNo"/>        
    </class>
</hibernate-mapping>

         這樣就完成了一對一的簡單配置,建立Junit測試類,插入數據:

public void testSave1(){
		Session session = null;
		try {
			session = HibernateUtils.getSession();
			session.beginTransaction();
			
			IdCard idCard = new IdCard();
			idCard.setCardNo("111111111111");
			
			Person person = new Person();
			person.setName("張三");
			//建立關聯
			person.setIdCard(idCard);
			//沒有拋出TransientObjectException異常,是由一對一關聯映射的特性決定的。
			//這樣他採用foreign映射策略才能取得關聯對象的標識
			session.save(person);
			
			session.getTransaction().commit();
		} catch (Exception e) {
			e.printStackTrace();
			session.getTransaction().rollback();
		} finally{
			HibernateUtils.closeSession(session);
		}
	}

         查看數據庫:



         至此,一對一的單向關聯映射就完成了。一對一的雙向關聯映射,根據上篇博客說道的一對多雙向關聯映射可

知,在IdCard實體裏添加Person爲屬性,並在IdCard.hbm.xml文件裏再配上<one-to-one name="person">標籤就可

以了。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章