<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年8月>
    303112345
    6789101112
    13141516171819
    20212223242526
    272829303112
    3456789

    導航

    常用鏈接

    隨筆分類(27)

    隨筆檔案(28)

    搜索

    最新評論

    主站蜘蛛池模板: 国产亚洲精品影视在线| 亚洲精品视频专区| WWW亚洲色大成网络.COM| 毛片免费在线播放| 久久乐国产综合亚洲精品| 日韩欧美一区二区三区免费观看 | 免费中文字幕一级毛片| 亚洲AV成人无码网站| 日本高清色本免费现在观看| 亚洲欧美成人一区二区三区| 午夜影视在线免费观看| 国产亚洲精品国产福利在线观看| 性做久久久久免费看| 黄色网址大全免费| 亚洲中文字幕无码一久久区| 日韩精品无码免费专区网站| 久久亚洲精精品中文字幕| 可以免费看黄视频的网站| 亚洲中文无码卡通动漫野外| 精品国产免费观看一区| 免费人妻精品一区二区三区| 亚洲中文字幕无码一区| 91精品全国免费观看含羞草| 亚洲综合偷自成人网第页色| 国产高清在线精品免费软件| 国产精品成人免费观看| 久久精品a亚洲国产v高清不卡| 噼里啪啦电影在线观看免费高清| 亚洲av成人中文无码专区| 亚洲中文字幕无码久久综合网| 69免费视频大片| 精品国产日韩亚洲一区91| 亚洲中文字幕第一页在线| 16女性下面扒开无遮挡免费| 亚洲爆乳大丰满无码专区| 亚洲一区二区三区在线播放| 最刺激黄a大片免费网站| 老子影院午夜伦不卡亚洲| 国产精品亚洲片在线观看不卡| 欧美a级成人网站免费| 国产日韩久久免费影院|