<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

    主站蜘蛛池模板: 亚洲成?v人片天堂网无码| 国产精品免费_区二区三区观看| 精品国产人成亚洲区| 青草青草视频2免费观看| 日本不卡视频免费| 美女视频黄频a免费| 亚洲国产电影av在线网址| 在线播放国产不卡免费视频 | 亚洲欧美国产精品专区久久| 亚洲天堂免费在线| 亚洲六月丁香六月婷婷色伊人 | 亚洲综合精品一二三区在线| 特级无码毛片免费视频尤物| 久久精品国产亚洲AV香蕉| 蜜臀98精品国产免费观看| 亚洲五月综合缴情婷婷| 国产黄色片在线免费观看| 另类小说亚洲色图| 国产亚洲欧洲Aⅴ综合一区| 免费人成毛片动漫在线播放| 亚洲最大在线观看| 国内自产拍自a免费毛片| 一区二区三区视频免费| 亚洲av激情无码专区在线播放| 69影院毛片免费观看视频在线 | 国产亚洲精久久久久久无码| 99在线视频免费| 亚洲精华国产精华精华液好用| 亚洲国产精品专区在线观看| a毛片免费观看完整| 亚洲三级中文字幕| 亚洲成?v人片天堂网无码| 99精品视频在线免费观看| 亚洲国产精品精华液| 亚洲精品午夜国产VA久久成人| 久久九九兔免费精品6| 国产精品亚洲专区无码不卡| 亚洲精品少妇30p| 成年女人毛片免费观看97| 久久WWW免费人成—看片| ww亚洲ww在线观看国产|