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

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

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

    Hibernate復合主鍵的處理 (二)

    基于主鍵類的復合主鍵:
    方法:將主鍵字段從POJO類中提出了,生成一個主鍵類。
    可以將1中的例子加以改造,將firstname和lastname字段單獨提取到一個主鍵類中。

    1.
    配置文件TUser.hbm.xml
    composite-id節點的name指定了實體類中的主鍵類的屬性名。

    <?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 package="cn.blogjava.start">
        
    <class name="TUser" table="t_user" catalog="sample">
            
    <composite-id name="userPK" class="TUserPK">
                
    <key-property name="lastname" column="lastname" type="string" />
                
    <key-property name="firstname" column="firstname" type="string" />
            
    </composite-id>

            
    <property name="age" type="integer" column="age"/>
        
    </class>
    </hibernate-mapping>

    2.POJO類
    package cn.blogjava.start;

    /**
     * TUser generated by hbm2java
     
    */

    public class TUser implements java.io.Serializable {

        
    // Fields    

        
    private Integer age;
        
        //配置文件composite-id的name屬性
        
    private TUserPK userPK;


        
    public Integer getAge() {
            
    return age;
        }

        
    public void setAge(Integer age) {
            
    this.age = age;
        }

        
    public TUserPK getUserPK() {
            
    return userPK;
        }

        
    public void setUserPK(TUserPK userPK) {
            
    this.userPK = userPK;
        }
    }

    3.主鍵類TUserPK.java
    package cn.blogjava.start;

    import java.io.Serializable;

    import org.apache.commons.lang.builder.EqualsBuilder;
    import org.apache.commons.lang.builder.HashCodeBuilder;

    public class TUserPK implements Serializable {

        
    private String firstname;
        
    private String lastname;

        
    public String getFirstname() {
            
    return firstname;
        }

        
    public void setFirstname(String firstname) {
            
    this.firstname = firstname;
        }

        
    public String getLastname() {
            
    return lastname;
        }

        
    public void setLastname(String lastname) {
            
    this.lastname = lastname;
        }
        
        
    public boolean equals(Object obj) {
            
    if(!(obj instanceof TUserPK)) {
                
    return false;
            }
            
            TUserPK userPK 
    = (TUserPK)obj;
            
    return new EqualsBuilder()
                .appendSuper(
    super.equals(obj))
                .append(
    this.lastname, userPK.lastname)
                .append(
    this.firstname, userPK.firstname)
                .isEquals();        
        }
        
        
    public int hasCode() {
            
    return new HashCodeBuilder(-528253723-475504089)
                .appendSuper(
    super.hashCode())
                .append(
    this.lastname).append(this.firstname)
                .toHashCode();            
        }
    }

    4.測試代碼HibernateTest.java
    package cn.blogjava.start;

    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;
        
    /**
         * JUnit中的setUp方法在TestCase初始化的時候會自動調用
         * 一般用于初始化公用資源
         
    */
        
    protected void setUp() {
            
    try {
                
    /**
                 * 可以采用hibernate.properties或者hibernate.cfg.xml
                 * 配置文件的初始化代碼
                 * 
                 * 采用hibernate.properties
                 * Configuration config = new Configuration();
                 * config.addClass(TUser.class);
                 
    */
                
                
    //采用hibernate.cfg.xml配置文件,與上面的方法對比,兩個差異
                
    //1.Configuration的初始化方式
                
    //2.xml
                Configuration config = new Configuration().configure();
                SessionFactory sessionFactory 
    = config.buildSessionFactory();
                session 
    = sessionFactory.openSession();
                
            } 
    catch (HibernateException e) {
                
    // TODO: handle exception
                e.printStackTrace();
            }        
        }

        
    /**
         * JUnit中的tearDown方法在TestCase執行完畢的時候會自動調用
         * 一般用于釋放資源
         
    */    
        
    protected void tearDown() {
            
    try {
                session.close();        
            } 
    catch (HibernateException e) {
                
    // TODO: handle exception
                e.printStackTrace();
            }        
        }    
        
        
    /**
         * 對象持久化測試(Insert方法)
         
    */        
        
    public void testInsert() {
            Transaction tran 
    = null;
            
    try {
                tran 
    = session.beginTransaction();
                TUser user 
    = new TUser();
                TUserPK userPK 
    = new TUserPK();
                userPK.setFirstname(
    "yu");
                userPK.setLastname(
    "yy");
                user.setUserPK(userPK);
                user.setAge(
    25);
                session.save(user);
                session.flush();
                tran.commit();
            } 
    catch (HibernateException e) {
                
    // TODO: handle exception
                e.printStackTrace();
                Assert.fail(e.getMessage());
                
    if(tran != null) {
                    
    try {
                        tran.rollback();
                    } 
    catch (Exception e1) {
                        
    // TODO: handle exception
                        e1.printStackTrace();
                    }
                }
            }
        }
        
        
    /**
         * 對象讀取測試(Select方法)
         
    */            
        
    public void testSelect(){
            TUserPK userPK 
    = new TUserPK();
            userPK.setFirstname(
    "yu"
    );
            userPK.setLastname(
    "yy"
    );
            
            TUser user 
    = (TUser)session.load(TUser.class
    , userPK);
            Assert.assertEquals(user.getAge().intValue(), 
    25);
        }
    }

    posted on 2006-06-29 22:42 baim 閱讀(2739) 評論(1)  編輯  收藏 所屬分類: 開源軟件框架

    評論

    # re: Hibernate復合主鍵的處理 (二) 2006-08-02 18:08 dt1

    請問如果有類要關聯包含復合主鍵的類該如何定義關聯關系?  回復  更多評論   

    <2006年6月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導航

    常用鏈接

    隨筆分類(27)

    隨筆檔案(28)

    搜索

    最新評論

    主站蜘蛛池模板: 日韩精品无码免费专区网站| 亚洲av无码专区国产乱码在线观看| 亚洲黄色在线播放| 国产特黄特色的大片观看免费视频| 在线观看AV片永久免费| 久久久久久亚洲av成人无码国产| 最好2018中文免费视频| 国产又大又黑又粗免费视频 | 日产乱码一卡二卡三免费| 亚洲欧洲日本国产| 亚洲一区二区三区免费在线观看| 亚洲精品456在线播放| 久久久久久国产精品免费无码| 久久综合日韩亚洲精品色| 日韩在线不卡免费视频一区| 亚洲五月激情综合图片区| 美女内射毛片在线看免费人动物| 亚洲午夜在线一区| 无码视频免费一区二三区| 99亚洲精品卡2卡三卡4卡2卡| 大胆亚洲人体视频| 9久热这里只有精品免费| 久久亚洲成a人片| 成人免费毛片内射美女-百度| 中文字幕亚洲综合小综合在线 | 一级毛片试看60分钟免费播放| 国产精品亚洲mnbav网站| 亚洲综合久久成人69| 99精品国产免费久久久久久下载| 亚洲av第一网站久章草| 亚洲AV之男人的天堂| 久久免费精品一区二区| 亚洲一区二区三区久久| 四虎永久在线免费观看| 最好免费观看高清在线| 亚洲国产综合精品中文第一| 午夜不卡久久精品无码免费| 亚洲娇小性xxxx| 超清首页国产亚洲丝袜| 成人免费网站视频www| 亚洲AV永久无码精品水牛影视 |