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

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

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

    隨筆-124  評論-49  文章-56  trackbacks-0

    多對一關聯映射 many-to-one
    關聯映射本質:
      * 將關聯關系映射到數據庫,所謂的關聯關系是對象模型在內存中的一個或多個引用。
     
    <many-to-one/>標簽會在多的一端加入一個外鍵,指定一的一端,這個外鍵是由<many-to-one>
    中的column屬性定義的,如果忽略了這個屬性那么默認的外鍵與實體的屬性一致

    <many-to-one/>標簽的定義示例:
      * <many-to-one name="group" column="groupid" cascade="save-update"/>
        其中cascade屬性為級聯操作,值可以為all、save-update、delete,默認為none
        級聯操作:是對象的連鎖操作
      * 級聯操作的解決方法有兩種:1 設cascade屬性,2 先進行save操作

    <!--
      User:                                      Group:
        private int id;                     private int id;
        private String name;         private String name;
        private Group group;
    -->
    <class name="com.my.hibernate.Group" table="t_group">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="name"/>
    </class>

    <class name="com.my.hibernate.User" table="t_user">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="name"/>
            
    <property name="password"/>
            
    <property name="createTime"/>
            
    <property name="expireTime"/>
            
    <many-to-one name="group" column="groupid" cascade="save-update"/>
    </class>

    public void testSave1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                
                session.beginTransaction();
                Group group
    =new Group();
                group.setName(
    "尚學堂");
                
                User user
    =new User();
                user.setName(
    "采10");
                user.setPassword(
    "123");
                user.setCreateTime(
    new Date());
                user.setExpireTime(
    new Date());
                user.setGroup(group);
                
                User user1
    =new User();
                group.setName(
    "尚學堂");
                user1.setName(
    "張三");
                user1.setPassword(
    "888");
                user1.setCreateTime(
    new Date());
                user1.setExpireTime(
    new Date());
                user1.setGroup(group);
                
                
    //不能成功保存,拋出TransientObjectException異常
                
    //因為Group為Transient狀態,id沒有分配值
                
    //persistent狀態的對象是不能引用trainsient狀態的對象的
                session.save(user);
                session.save(user1);
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    public void testSave2(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                
                session.beginTransaction();
                Group group
    =new Group();
                group.setName(
    "尚學堂");
                session.save(group);
                
                User user
    =new User();
                user.setName(
    "采10");
                user.setPassword(
    "123");
                user.setCreateTime(
    new Date());
                user.setExpireTime(
    new Date());
                user.setGroup(group);
                
                User user1
    =new User();
                group.setName(
    "尚學堂");
                user1.setName(
    "張三");
                user1.setPassword(
    "888");
                user1.setCreateTime(
    new Date());
                user1.setExpireTime(
    new Date());
                user1.setGroup(group);

                
    //可以存儲,因為對Group進行了save操作
                session.save(user);
                session.save(user1);
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    public void testSave3(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                
                session.beginTransaction();
                Group group
    =new Group();
                group.setName(
    "尚學堂");
                User user
    =new User();
                user.setName(
    "采10");
                user.setPassword(
    "123");
                user.setCreateTime(
    new Date());
                user.setExpireTime(
    new Date());
                user.setGroup(group);
                
                User user1
    =new User();
                group.setName(
    "尚學堂");
                user1.setName(
    "張三");
                user1.setPassword(
    "888");
                user1.setCreateTime(
    new Date());
                user1.setExpireTime(
    new Date());
                user1.setGroup(group);
                
                
    //不會拋出異常,因為采用了cascade屬性,所以它會先保存Group
                
    //采用cascade屬性是解決TransientObjectException異常的一種手段
                session.save(user);
                session.save(user1);
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    public void testload1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
                User user
    =(User)session.load(User.class3);
                System.out.println(user.getName());
                System.out.println(user.getGroup().getName());
                
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

    一對一關聯映射 one-to-one
    1 主鍵關聯映射(單向關聯Person--->Card)
    <one-to-one/>主鍵關聯映射
      * 讓兩個實體對象的id保持相同,這樣可以避免多余的字段被創建
      * 具體映射:
      <id name="id">
       person的主鍵來源于Card,也就是共享Card的主鍵
       <generator class="foreign">
        <param name="property">card</param>
       </generator>
      </id>
      <one-to-one/>標簽的含義,指示hibernate怎么加載它的關聯對象,默認根據主鍵加載,
      constrained="true",表明當前主鍵上存在一個約束,person的主鍵作為外鍵參照了Card
      <one-to-one name="card" constrained="true"/>
    public void testSave1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
                Card card
    =new Card();
                card.setCardNo(
    "sadfsaffsf");
                Person person
    =new Person();
                person.setName(
    "werwer");
                person.setCard(card);
                
    //不會出現TransientObjectException異常
                
    //因為一對一主鍵關聯映射中,默認為cascade屬性
                session.save(person);
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

        
        
    public void testLoad1(){
            Session session
    =null;
            
    try{
                session
    =HibernateUtils.getSession();
                session.beginTransaction();
                
                Person person
    =(Person)session.load(Person.class7);
                System.out.print(person.getName());
                System.out.print(person.getCard().getCardNo());
                
                session.getTransaction().commit();
            }
    catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }
    finally{
                HibernateUtils.closeSession(session);
            }

        }

     

    一對一關聯映射 one-to-one
    2 主鍵關聯映射(雙向關聯Person<--->Card)
    需要在Card映射文件中加入<one-to-one/>標簽指向person,指示hibernate如何加載person
    默認根據主鍵加載
    只能用于查詢,load和get

    <!--
      Person:                              Card:
        private int id;                  private int id;
        private String name;      private String cardNo;
        private Card card;          private Person person;
    -->        
    <class name="com.my.hibernate.Card" table="t_card">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="cardNo"/>
            
    <one-to-one name="person"/>
    </class>

    <class name="com.my.hibernate.Person" table="t_person">
            
    <id name="id">
                
    <generator class="foreign">
                    
    <param name="property">card</param>
                
    </generator>
            
    </id>
            
    <property name="name"/>
            
    <one-to-one name="card" constrained="true"/>
    </class>

    public void testLoad2(){
            Session session=null;
            try{
                session=HibernateUtils.getSession();
                session.beginTransaction();
                
                
                Card card=(Card)session.load(Card.class, 7);
                System.out.println(card.getCardNo());
                System.out.println(card.getPerson().getName());
                
                session.getTransaction().commit();
            }catch(Exception e){
                e.printStackTrace();
                session.getTransaction().rollback();
            }finally{
                HibernateUtils.closeSession(session);
            }
        }

    一對一唯一外鍵關聯映射
    1 一對一外鍵關聯映射(單向關聯Person--->Card)
    <many-to-one/>一對一外鍵關聯映射是多對一的特例,
    采用<many-to-one/>標簽,設多的一端的unique="true",這樣就限制了多的一端的多重性為一
    <!--
      Person:                            Card:
        private int id;                  private int id;
        private String name;      private String cardNo;
        private Card card;        private Person person;
    -->    
    <class name="com.my.hibernate.Person" table="t_person">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="name"/>
            
    <many-to-one name="card" unique="true" column="cardid" cascade="save-update"/>
    </class>

    <class name="com.my.hibernate.Card" table="t_card">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="cardNo"/>
    </class>

    一對一唯一外鍵關聯映射

    1 一對一外鍵關聯映射(雙向關聯Person<--->Card)
    采用<ont-to-one/>標簽,指示hibernate如何加載其關聯對象,默認根據主鍵加載。
    外鍵關聯映射中,因為兩個實體采用的是person的外鍵的關系,所以不能指定主鍵相載person,
    而要根據person的外鍵加載,所以設property-ref="card"
    <!--
      Person:                   Card:
        private int id;           private int id;
        private String name;      private String cardNo;
        private Card card;        private Person person;
    -->
    <class name="com.my.hibernate.Card" table="t_card">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="cardNo"/>
            
    <one-to-one name="person" property-ref="card"/>
    </class>

    <class name="com.my.hibernate.Person" table="t_person">
            
    <id name="id">
                
    <generator class="native"/>
            
    </id>
            
    <property name="name"/>
            
    <many-to-one name="card" unique="true" column="cardid" cascade="save-update"/>
    </class>
    posted on 2009-11-03 15:53 junly 閱讀(434) 評論(0)  編輯  收藏 所屬分類: hibernate/orm
    主站蜘蛛池模板: 精品亚洲视频在线观看| 久久笫一福利免费导航| 免费在线观看你懂的| 亚洲精品无码成人片久久不卡| 国产精品久久久久久久久免费| 亚洲春黄在线观看| 国产精品永久免费10000| 亚洲人成7777| 成年大片免费视频| 亚洲国产成人久久综合| 国产yw855.c免费视频| 免费人妻精品一区二区三区| 亚洲午夜成人精品电影在线观看| 一区二区三区视频免费观看| 国产亚洲人成A在线V网站| a级毛片免费完整视频| 亚洲av无码片在线播放| 99视频全部免费精品全部四虎| 亚洲ts人妖网站| 性做久久久久免费看| xxxxx做受大片在线观看免费| 亚洲国产成人片在线观看无码| 麻豆成人久久精品二区三区免费| 亚洲一区二区三区在线网站| 精品国产一区二区三区免费看| 四虎一区二区成人免费影院网址| 亚洲国产综合无码一区| 最近的中文字幕大全免费8| 亚洲日本va一区二区三区| 亚洲免费日韩无码系列| 99热精品在线免费观看| 色噜噜亚洲男人的天堂| 国产国产人免费视频成69大陆| 91精品全国免费观看青青| 99久久婷婷国产综合亚洲| 中文字幕一精品亚洲无线一区| 3344永久在线观看视频免费首页| 苍井空亚洲精品AA片在线播放| 久久久久久a亚洲欧洲aⅴ| 麻豆国产人免费人成免费视频 | 四虎影院在线免费播放|