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

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

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

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

    對于ORM而言,一個重要的特性就是對實體之間關(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-07-03 16:37 baim 閱讀(570) 評論(0)  編輯  收藏 所屬分類: 開源軟件框架

    <2006年7月>
    2526272829301
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    導(dǎo)航

    常用鏈接

    隨筆分類(27)

    隨筆檔案(28)

    搜索

    最新評論

    主站蜘蛛池模板: 久久综合亚洲色HEZYO社区| 亚洲一区二区三区夜色| 亚洲91av视频| 九九久久国产精品免费热6| 国产一卡2卡3卡4卡无卡免费视频| 亚洲JIZZJIZZ中国少妇中文| 亚洲激情黄色小说| 美女在线视频观看影院免费天天看| 免费va人成视频网站全| 亚洲人成伊人成综合网久久| 91短视频在线免费观看| 国产亚洲精品自在久久| 国产JIZZ中国JIZZ免费看| 亚洲人成色77777在线观看大| 免费精品久久久久久中文字幕| 免费看美女让人桶尿口| 亚洲人av高清无码| 四色在线精品免费观看| 亚洲综合一区二区三区四区五区| 四虎永久在线观看免费网站网址| 免费高清A级毛片在线播放| 国产婷婷综合丁香亚洲欧洲| 最新免费jlzzjlzz在线播放| 亚洲一区AV无码少妇电影| 久久国产亚洲精品麻豆| 最近免费字幕中文大全视频| 免费国产高清毛不卡片基地| 久久精品国产亚洲av麻豆小说 | 亚洲第一页日韩专区| 最近中文字幕完整免费视频ww| 青青视频免费在线| 亚洲成人高清在线| 毛片免费视频播放| 亚洲AV成人片无码网站| 免费国产精品视频| 在线天堂免费观看.WWW| 亚洲AV无码一区二区三区性色 | 国产亚洲中文日本不卡二区| 日韩精品亚洲专区在线观看| 久久免费99精品国产自在现线| 亚洲AV无码成人精品区天堂|