<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)

    搜索

    最新評論

    主站蜘蛛池模板: 黄色免费网站网址| 久久青青草原国产精品免费| 97人妻无码一区二区精品免费| 国产成A人亚洲精V品无码| 国产视频精品免费视频| 久久亚洲国产成人影院网站| 立即播放免费毛片一级| 亚洲精品乱码久久久久久不卡| 日本一区二区三区免费高清在线| 亚洲av无码成人精品区在线播放| 精品在线免费视频| 亚洲色偷偷狠狠综合网| 精品无码国产污污污免费网站国产| 久久久久亚洲精品天堂久久久久久| 中文字幕在线观看免费| 亚洲va久久久噜噜噜久久男同| 无码人妻久久一区二区三区免费| 亚洲福利在线观看| 成年免费大片黄在线观看岛国 | 亚洲国产精品国产自在在线| 无遮挡a级毛片免费看| 亚洲一级特黄大片在线观看 | 日本免费网站视频www区| 亚洲在成人网在线看| 一个人看的www在线观看免费| 亚洲a无码综合a国产av中文| 亚洲午夜福利精品无码| 99免费观看视频| 亚洲熟妇AV一区二区三区宅男| 亚洲国产综合精品一区在线播放| 国产成人免费ā片在线观看老同学 | a级成人毛片免费图片| 亚洲成人黄色在线观看| 四虎影在线永久免费观看| 成人无码视频97免费| 亚洲电影免费观看| 免费**毛片在线播放直播| 8x8×在线永久免费视频| 老司机免费午夜精品视频| 亚洲av色福利天堂| 国产男女猛烈无遮档免费视频网站 |