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

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

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

    Topquan's Blog

    分享價值----成就你我----我的博客----你的家

    Hibernate一對一數(shù)據(jù)關(guān)聯(lián)(一)

    對于ORM而言,一個重要的特性就是對實(shí)體之間關(guān)聯(lián)關(guān)系的管理。數(shù)據(jù)關(guān)聯(lián)是ORM一個重要的特征,但往往也是導(dǎo)致性能低下的原因,在開發(fā)中要特別注意這一點(diǎn)。

    一對一關(guān)聯(lián)有兩種類型:主鍵關(guān)聯(lián)和唯一外鍵關(guān)聯(lián)

    一.主鍵關(guān)聯(lián):
    一對一主鍵關(guān)聯(lián)形式,即兩張關(guān)聯(lián)表通過主鍵形成一對一映射關(guān)系。
    例如,一個中國公民只能有一份護(hù)照。

    1.數(shù)據(jù)模型如下



    2.表定義sql
    DROP   TABLE  T_User;
    DROP   TABLE  T_Passport;

    CREATE   TABLE  T_Passport (
           id 
    INT   NOT   NULL
         , serial 
    VARCHAR ( 30 )
         , expiry 
    INT
         , 
    PRIMARY   KEY  (id)
    );

    CREATE   TABLE  T_User (
           id 
    INT   NOT   NULL  AUTO_INCREMENT
         , name 
    VARCHAR ( 50 )
         , age 
    INT
         , 
    PRIMARY   KEY  (id)
         , 
    INDEX  (id)
         , 
    CONSTRAINT  FK_T_User_1  FOREIGN   KEY  (id)
                      
    REFERENCES  T_Passport (id)
    );



    3.POJO類
    TUser.java

    package  cn.blogjava.start;

    public   class  TUser   implements  java.io.Serializable {
        
    //  Fields    
          private  Integer id;
         
    private  Integer age;
         
    private  String name;
         
    private  TPassport passport;


        
    //  Constructors

        
    public  Integer getAge() {
            
    return  age;
        }

        
    public   void  setAge(Integer age) {
            
    this .age  =  age;
        }

        
    public  TPassport getPassport() {
            
    return  passport;
        }

        
    public   void  setPassport(TPassport passport) {
            
    this .passport  =  passport;
        }

        
    /**  default constructor  */
        
    public  TUser() {
        }
        
        
    /**  constructor with id  */
        
    public  TUser(Integer id) {
            
    this .id  =  id;
        }
        
    //  Property accessors

        
    public  Integer getId() {
            
    return   this .id;
        }
        
        
    public   void  setId(Integer id) {
            
    this .id  =  id;
        }

        
    public  String getName() {
            
    return   this .name;
        }
        
        
    public   void  setName(String name) {
            
    this .name  =  name;
        }

    }


    TPassport.java

    package  cn.blogjava.start;

    import  java.io.Serializable;

    public   class  TPassport  implements  Serializable {
        
    private  Integer id;
        
    private  String serial;
        
    private  Integer expiry;
        
    private  TUser user;
        
        
    public  Integer getExpiry() {
            
    return  expiry;
        }
        
    public   void  setExpiry(Integer expiry) {
            
    this .expiry  =  expiry;
        }
        
    public  Integer getId() {
            
    return  id;
        }
        
    public   void  setId(Integer id) {
            
    this .id  =  id;
        }
        
    public  String getSerial() {
            
    return  serial;
        }
        
    public   void  setSerial(String serial) {
            
    this .serial  =  serial;
        }
        
    public  TUser getUser() {
            
    return  user;
        }
        
    public   void  setUser(TUser user) {
            
    this .user  =  user;
        }
        
    }


    3.配置文件
    TUser.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 ="cn.blogjava.start.TUser"  table ="T_User"  catalog ="sample" >
            
    < id  name ="id"  type ="integer" >
                
    < column  name ="id"   />
                
    < generator  class ="native"   />
            
    </ id >
            
    < property  name ="name"  type ="string" >
                
    < column  name ="name"  length ="100"  not-null ="true"   />
            
    </ property >
            
    < property  name ="age"  type ="java.lang.Integer"  column ="age"   />
            
    < one-to-one  name ="passport"  
                        class
    ="cn.blogjava.start.TPassport"
     
                        cascade
    ="all"
     
                        outer-join
    ="true"
     
             
    />

        
    </ class >
    </ hibernate-mapping >


    TPassport.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 ="cn.blogjava.start.TPassport"  table ="T_Passport"  catalog ="sample" >
            
    < id  name ="id"  type ="integer"  column ="id" >
                
    < generator  class ="foreign" >
                    
    < param  name ="property" > user </ param >
                
    </ generator >            
            
    </ id >

            
    < property  name ="serial"  type ="string"  column ="serial"   />
            
    < property  name ="expiry"  type ="java.lang.Integer"  column ="expiry"   />
            
            
    < one-to-one  name ="user"  
                        class
    ="cn.blogjava.start.TUser"
     
                        constrained
    ="true"

             
    />
        
    </ class >
    </ hibernate-mapping >


    4.測試代碼

    package  cn.blogjava.start;

    import  java.util.List;

    import  junit.framework.Assert;
    import  junit.framework.TestCase;

    import  org.hibernate.HibernateException;
    import  org.hibernate.Session;
    import  org.hibernate.SessionFactory;
    import  org.hibernate.Transaction;
    import  org.hibernate.cfg.Configuration;


    public   class  HibernateTest  extends  TestCase {
        
        Session session 
    =   null ;
         protected   void  setUp() {
            
    try  {

                Configuration config  =   new  Configuration().configure();
                SessionFactory sessionFactory 
    =  config.buildSessionFactory();
                session 
    =  sessionFactory.openSession();
                
            } 
    catch  (HibernateException e) {
                e.printStackTrace();
            }        
        }

         protected   void  tearDown() {
            
    try  {
                session.close();        
            } 
    catch  (HibernateException e) {
               e.printStackTrace();
            }        
        }    
        
         public   void  testInsert() {
            Transaction tran 
    =   null ;
            
    try  {
            
                TUser user 
    =   new  TUser();
                user.setName(
    " byf " );
                user.setAge(
    new  Integer( 26 ));
                
                TPassport passport 
    =   new  TPassport();
                passport.setSerial(
    " PCN123456 " );
                passport.setExpiry(
    new  Integer( 20081010 ));
                
                
    // 設(shè)置相互關(guān)聯(lián)
                user.setPassport(passport);
                passport.setUser(user);

                tran 
    =  session.beginTransaction();
                session.save(user);
                session.flush();
                tran.commit();
                Assert.assertEquals(user.getId().intValue()
    > 0  , true );
            } 
    catch  (HibernateException e) {
                e.printStackTrace();
                Assert.fail(e.getMessage());
                
    if (tran  !=   null ) {
                    
    try  {
                        tran.rollback();
                    } 
    catch  (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            }
        }
        
        
    /**
         * 對象讀取測試(Select方法)
         
    */             
        
    public   void  testSelect(){
            String hql 
    =   "  from TUser where name='byf' " ;
            
    try  {
                List userList 
    =  session.createQuery(hql).list();
                TUser user 
    =  (TUser)userList.get( 0 );
                System.out.println(
    " user name is  "   +  user.getName());
                System.out.println(
    " passport serial NO. is  "   +  user.getPassport().getSerial());
                Assert.assertEquals(user.getName(), 
    " byf " );
            } 
    catch  (Exception e) {
                e.printStackTrace();
                Assert.fail(e.getMessage());
            }
        }
    }

    posted on 2006-08-05 00:41 topquan 閱讀(438) 評論(0)  編輯  收藏 所屬分類: Hibernate

    主站蜘蛛池模板: 日韩免费无码视频一区二区三区| 日韩毛片一区视频免费| 久久国产精品亚洲综合| 亚洲人成777在线播放| 一级毛片免费不卡| 国产亚洲情侣一区二区无| 亚洲va精品中文字幕| 97在线视频免费公开视频| 女人18特级一级毛片免费视频| 亚洲中文久久精品无码1 | 亚洲性无码AV中文字幕| 成人毛片手机版免费看| 麻豆亚洲AV永久无码精品久久| 国产精品免费大片| 亚洲春色在线观看| 免费看美女让人桶尿口| 特黄特色大片免费| 亚洲日韩欧洲乱码AV夜夜摸| 在线看片免费人成视频福利| 亚洲视频一区二区| 久久aa毛片免费播放嗯啊| 亚洲国产午夜精品理论片| 日本大片在线看黄a∨免费| 亚洲乱码一二三四区麻豆| 精品国产免费一区二区| 一级做a爰性色毛片免费| 亚洲最大福利视频网站| 成年女人午夜毛片免费视频 | 亚洲色无码专区一区| 免费大片黄手机在线观看| 一本色道久久88亚洲精品综合 | 亚洲激情视频网站| 精品免费久久久久久成人影院| 久久久久国色AV免费观看| 亚洲综合综合在线| 国产免费啪嗒啪嗒视频看看| 粉色视频免费入口| 亚洲AV中文无码乱人伦在线视色 | 国产精品免费久久久久久久久| 深夜国产福利99亚洲视频| 国产精品区免费视频|