溫故知新:hibernate_08_表關(guān)聯(lián)_一對(duì)一雙向關(guān)聯(lián)

          一對(duì)一雙向關(guān)聯(lián),在一對(duì)一的單向的基礎(chǔ)上,在不維護(hù)關(guān)系的那一端添加one-to-one配置
          實(shí)體類和配置如下
          package domain;

          public class Card {
              
              private int id;
              private String no;
              private Person person;
              //get/set和構(gòu)造省略,但實(shí)際不可省略
              
          }

           1 <?xml version="1.0"?>
           2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
           4 <!-- Generated 2014-7-9 7:00:47 by Hibernate Tools 3.4.0.CR1 -->
           5 <hibernate-mapping>
           6     <class name="domain.Card" table="CARD">
           7         <id name="id" type="int">
           8             <column name="ID" />
           9             <generator class="native" />
          10         </id>
          11         <property name="no" type="java.lang.String">
          12             <column name="NO" />
          13         </property>
          14         <many-to-one column="pid" name="person" class="domain.Person" unique="true"/>
          15     </class>
          16 </hibernate-mapping>
          17 

          package domain;

          public class Person {
              
              private int id;
              private String name;
              private Card card;
              //get/set和構(gòu)造省略,但實(shí)際不可省略
              
          }

           1 <?xml version="1.0"?>
           2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
           3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
           4 <!-- Generated 2014-7-9 7:00:47 by Hibernate Tools 3.4.0.CR1 -->
           5 <hibernate-mapping>
           6     <class name="domain.Person" table="PERSON">
           7         <id name="id" type="int">
           8             <column name="ID" />
           9             <generator class="native" />
          10         </id>
          11         <property name="name" type="java.lang.String">
          12             <column name="NAME" />
          13         </property>
          14         <one-to-one name="card" class="domain.Card" property-ref="person"/>
          15     </class>
          16 </hibernate-mapping>
          17 
          書(shū)寫(xiě)測(cè)試類
            1 package demo;
            2 
            3 import org.hibernate.Session;
            4 import org.junit.Test;
            5 
            6 import domain.Card;
            7 import domain.Person;
            8 import util.HibernateUtil;
            9 
           10 public class App 
           11 {
           12     @Test
           13     /**
           14      * 一對(duì)一雙向,關(guān)系由card的控制
           15      */
           16     public void test01(){
           17         
           18         Session session = null;
           19         try {
           20             session = HibernateUtil.openSession();
           21             session.beginTransaction();
           22             
           23             Person person = new Person();
           24             person.setName("Nick");
           25             session.save(person);
           26         
           27             Card card = new Card();
           28             card.setNo("#1");
           29             card.setPerson(person);
           30             
           31             session.save(card);
           32             
           33             session.getTransaction().commit();
           34             
           35         } catch (Exception e) {
           36             e.printStackTrace();
           37             if (session!=null) {
           38                 session.getTransaction().rollback();
           39             }
           40         }finally{
           41             if (session!=null) {
           42                 session.close();
           43             }
           44         }
           45         
           46     }
           47     
           48     @Test
           49     /**
           50      * 一對(duì)一雙向,關(guān)系由card的控制,重復(fù)添加多個(gè)card給一個(gè)person會(huì)報(bào)外鍵約束的異常
           51      */
           52     public void test02(){
           53         
           54         Session session = null;
           55         try {
           56             session = HibernateUtil.openSession();
           57             session.beginTransaction();
           58             
           59             Person person = (Person) session.load(Person.class, 1);
           60         
           61             Card card = new Card();
           62             card.setNo("#8");
           63             card.setPerson(person);
           64             
           65             session.save(card);
           66             
           67             session.getTransaction().commit();
           68             
           69         } catch (Exception e) {
           70             e.printStackTrace();
           71             if (session!=null) {
           72                 session.getTransaction().rollback();
           73             }
           74         }finally{
           75             if (session!=null) {
           76                 session.close();
           77             }
           78         }
           79         
           80     }
           81     
           82     @Test
           83     /**
           84      * 一對(duì)一雙向關(guān)聯(lián),需要使用load方法取不維護(hù)關(guān)系的一端,會(huì)直接取得關(guān)聯(lián)的一端,不使用懶加載
           85      * 因?yàn)椴痪S護(hù)關(guān)系,也就不存在外鍵,不存在外鍵也就不存在懶加載,一對(duì)一雙向關(guān)聯(lián)在實(shí)際開(kāi)發(fā)中
           86      * 不建議使用,因?yàn)椴樵兤渲幸环剑绻O(shè)置不當(dāng),會(huì)產(chǎn)生嵌套查詢
           87      */
           88     public void test03(){
           89         
           90         Session session = null;
           91         try {
           92             session = HibernateUtil.openSession();
           93             session.beginTransaction();
           94             
           95             Person person = (Person) session.load(Person.class, 1);
           96         
           97             System.out.println(person.getName());
           98             System.out.println(person.getCard().getNo());
           99             
          100             session.getTransaction().commit();
          101             
          102         } catch (Exception e) {
          103             e.printStackTrace();
          104             if (session!=null) {
          105                 session.getTransaction().rollback();
          106             }
          107         }finally{
          108             if (session!=null) {
          109                 session.close();
          110             }
          111         }
          112     }
          113     
          114     @Test
          115     /**
          116      * 一對(duì)一雙向關(guān)聯(lián),使用load方法取維護(hù)關(guān)系的一端,不會(huì)直接取得關(guān)聯(lián)的一端,使用懶加載
          117      * 但是一旦取得不維護(hù)關(guān)系的一端,會(huì)發(fā)現(xiàn)不維護(hù)關(guān)系的一端關(guān)聯(lián)另一個(gè)實(shí)體,會(huì)直接查詢,這樣
          118      * 會(huì)導(dǎo)致冗余操作
          119      */
          120     public void test04(){
          121         
          122         Session session = null;
          123         try {
          124             session = HibernateUtil.openSession();
          125             session.beginTransaction();
          126             
          127             Card card = (Card) session.load(Card.class, 1);
          128             
          129             System.out.println(card.getNo());
          130             System.out.println(card.getPerson().getName());
          131             
          132             session.getTransaction().commit();
          133             
          134         } catch (Exception e) {
          135             e.printStackTrace();
          136             if (session!=null) {
          137                 session.getTransaction().rollback();
          138             }
          139         }finally{
          140             if (session!=null) {
          141                 session.close();
          142             }
          143         }
          144     }
          145     
          146 }
          147 

          posted on 2015-01-21 09:39 都較瘦 閱讀(96) 評(píng)論(0)  編輯  收藏 所屬分類: ORMFramework

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計(jì)

          公告

          博客定位:囿于目前的水平,博客定位在記錄自己的學(xué)習(xí)心得和隨手的練習(xí)

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 苍梧县| 吉安县| 福泉市| 木兰县| 新民市| 泽普县| 蒙城县| 高陵县| 安塞县| 克什克腾旗| 搜索| 海原县| 治多县| 阿拉善盟| 方城县| 平顶山市| 志丹县| 柳江县| 兴海县| 托克逊县| 彰化市| 江油市| 江都市| 曲阳县| 泾阳县| 株洲县| 诸城市| 丹寨县| 蛟河市| 宜川县| 乐亭县| 吉安市| 西宁市| 稷山县| 射洪县| 萨嘎县| 外汇| 莫力| 吴桥县| 梅河口市| 安庆市|