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

    主站蜘蛛池模板: 美女被爆羞羞网站在免费观看| 亚洲AV福利天堂一区二区三 | 亚洲成a人无码亚洲成av无码| 亚洲剧情在线观看| 亚洲国产成人无码av在线播放| 亚洲精品不卡视频| 亚洲第一永久在线观看| 亚洲大香人伊一本线| 亚洲女人18毛片水真多| 99久久婷婷国产综合亚洲| 亚洲国产成人久久精品大牛影视 | 亚洲小说图区综合在线| 亚洲色丰满少妇高潮18p| 久久精品国产亚洲av瑜伽| 美国毛片亚洲社区在线观看| 青青视频免费在线| 国产免费A∨在线播放| 黄色网站软件app在线观看免费| 久久大香香蕉国产免费网站| 3d动漫精品啪啪一区二区免费| 69堂人成无码免费视频果冻传媒| 日韩免费一区二区三区在线| 免费无码成人AV片在线在线播放| 亚洲AⅤ优女AV综合久久久| 亚洲一区视频在线播放| 久久精品国产亚洲AV果冻传媒| 久久久久久亚洲Av无码精品专口| 亚洲乱码中文论理电影| 亚洲午夜无码久久久久软件| 免费人成视频在线观看免费| 免费无码一区二区三区蜜桃| 18女人水真多免费高清毛片| 免费看美女被靠到爽| 亚洲五月午夜免费在线视频 | 好吊妞998视频免费观看在线| 一本色道久久88综合亚洲精品高清| 中文字幕亚洲一区| 亚洲国产高清在线精品一区| 在线观看亚洲电影| 国产无遮挡裸体免费视频在线观看| 国产成人精品免费视|