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 閱讀(440) 評論(0)  編輯  收藏 所屬分類: Hibernate

          主站蜘蛛池模板: 平武县| 都兰县| 青河县| 万州区| 平泉县| 读书| 崇义县| 综艺| 婺源县| 云南省| 平度市| 六盘水市| 法库县| 石台县| 菏泽市| 临邑县| 宝丰县| 邻水| 晋宁县| 商城县| 乐亭县| 花莲县| 仪陇县| 博白县| 灵川县| 进贤县| 呼伦贝尔市| 芦溪县| 乳山市| 阿坝| 永顺县| 江都市| 嘉禾县| 大名县| 句容市| 溆浦县| 堆龙德庆县| 邯郸市| 额尔古纳市| 化隆| 榆树市|