<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    溫故知新:hibernate_08_表關聯_一對一雙向關聯

    一對一雙向關聯,在一對一的單向的基礎上,在不維護關系的那一端添加one-to-one配置
    實體類和配置如下
    package domain;

    public class Card {
        
        private int id;
        private String no;
        private Person person;
        //get/set和構造省略,但實際不可省略
        
    }

     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和構造省略,但實際不可省略
        
    }

     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 
    書寫測試類
      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      * 一對一雙向,關系由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      * 一對一雙向,關系由card的控制,重復添加多個card給一個person會報外鍵約束的異常
     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      * 一對一雙向關聯,需要使用load方法取不維護關系的一端,會直接取得關聯的一端,不使用懶加載
     85      * 因為不維護關系,也就不存在外鍵,不存在外鍵也就不存在懶加載,一對一雙向關聯在實際開發中
     86      * 不建議使用,因為查詢其中一方,如果設置不當,會產生嵌套查詢
     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      * 一對一雙向關聯,使用load方法取維護關系的一端,不會直接取得關聯的一端,使用懶加載
    117      * 但是一旦取得不維護關系的一端,會發現不維護關系的一端關聯另一個實體,會直接查詢,這樣
    118      * 會導致冗余操作
    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 都較瘦 閱讀(94) 評論(0)  編輯  收藏 所屬分類: ORMFramework

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    公告

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

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲av无码成人影院一区| 亚洲高清中文字幕| 国产亚洲高清在线精品不卡| 57PAO成人国产永久免费视频| 亚洲AV日韩精品久久久久久| 在线播放免费人成毛片乱码| 亚洲中文字幕无码久久精品1| xxxxx做受大片视频免费| 国内精品99亚洲免费高清| 成全视成人免费观看在线看| 久久精品国产69国产精品亚洲| 中文字幕在线免费看线人| 亚洲av无码精品网站| 真实国产乱子伦精品免费| 亚洲av永久无码精品天堂久久| 在线观看免费人成视频色9| 亚洲国产区男人本色| www.亚洲精品.com| 成人免费乱码大片A毛片| 亚洲短视频男人的影院| 1000部拍拍拍18勿入免费视频下载 | 久久久青草青青亚洲国产免观 | 久久精品亚洲中文字幕无码麻豆| 五月婷婷在线免费观看| 亚洲中文字幕无码久久| 免费成人在线观看| 免费精品一区二区三区第35| 亚洲视频一区在线播放| 日本一线a视频免费观看| 插鸡网站在线播放免费观看| 亚洲乱码日产精品BD在线观看| 日本xxwwxxww在线视频免费| 国内精品免费久久影院| 亚洲avav天堂av在线网爱情| 深夜国产福利99亚洲视频| 免费观看91视频| 亚洲日韩精品无码专区| 国产亚洲精品自在线观看| 亚洲精品在线免费看| 特级毛片aaaa级毛片免费| 久久久久亚洲av无码专区喷水|