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

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

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

    Topquan's Blog

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

    Hibernate一對一數據關聯(一)

    對于ORM而言,一個重要的特性就是對實體之間關聯關系的管理。數據關聯是ORM一個重要的特征,但往往也是導致性能低下的原因,在開發中要特別注意這一點。

    一對一關聯有兩種類型:主鍵關聯和唯一外鍵關聯

    一.主鍵關聯:
    一對一主鍵關聯形式,即兩張關聯表通過主鍵形成一對一映射關系。
    例如,一個中國公民只能有一份護照。

    1.數據模型如下



    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 ));
                
                
    // 設置相互關聯
                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

    主站蜘蛛池模板: 国产亚洲精品资在线| 国产zzjjzzjj视频全免费| 成年网站免费视频A在线双飞| 成人免费黄色网址| 成人性生交视频免费观看| 日韩免费a级在线观看| 亚洲国产天堂久久久久久| 国产亚洲色婷婷久久99精品| 久久丫精品国产亚洲av| 亚洲w码欧洲s码免费| 老司机午夜免费视频| 久久久国产精品福利免费| 国产又黄又爽又猛免费app| 国产成人精品123区免费视频| 国产亚洲情侣一区二区无| 亚洲福利视频网址| 成人亚洲国产精品久久| 成全动漫视频在线观看免费高清版下载 | 午夜理伦剧场免费| 最近免费中文字幕大全视频 | 四虎永久免费地址在线网站| 国产国拍亚洲精品福利| 亚洲一卡2卡4卡5卡6卡残暴在线| 国产成人综合亚洲绿色| 久久成人无码国产免费播放| 免费看a级黄色片| 亚洲国产另类久久久精品| 精品国产成人亚洲午夜福利| 国产精品福利在线观看免费不卡| 亚洲高清视频免费| 亚洲成AV人网址| 亚洲国产品综合人成综合网站| 国产精品亚洲а∨天堂2021| 免费一区二区三区| 国产区卡一卡二卡三乱码免费| 久久久亚洲精品国产| 美女露隐私全部免费直播| 最近高清中文字幕免费| 亚洲AV无码乱码在线观看牲色 | 亚洲国产天堂在线观看| 美女被爆羞羞网站免费|