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

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

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

    基于主鍵類的復合主鍵:
    方法:將主鍵字段從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-07-05 14:50 knowhow 閱讀(266) 評論(0)  編輯  收藏 所屬分類: ORM:Hibernate及其他
    主站蜘蛛池模板: 无码一区二区三区亚洲人妻| xxx毛茸茸的亚洲| 和老外3p爽粗大免费视频| 亚洲精品偷拍视频免费观看| 亚洲av日韩aⅴ无码色老头| 成人免费网站在线观看| 亚洲狠狠婷婷综合久久蜜芽| 四虎成人精品一区二区免费网站| 亚洲 欧洲 日韩 综合在线| 我要看免费的毛片| 国产亚洲Av综合人人澡精品| 亚洲视频中文字幕| 久久免费看少妇高潮V片特黄| 亚洲大片在线观看| 免费能直接在线观看黄的视频| 精品亚洲成在人线AV无码| 永久黄网站色视频免费直播| 亚洲人成网77777亚洲色| 国产亚洲美女精品久久| 亚洲国产精品无码久久九九| 国产免费MV大全视频网站| 亚洲AV无码成人精品区在线观看 | 亚洲人成小说网站色| 国产高清免费的视频| 国产精品免费久久久久久久久 | 中国亚洲女人69内射少妇| 久操视频在线免费观看| 亚洲一级特黄特黄的大片| 四虎免费永久在线播放| 91亚洲自偷在线观看国产馆| 青青草国产免费久久久下载| 精品无码一级毛片免费视频观看| 久久丫精品国产亚洲av不卡 | 亚洲欧洲国产综合| 国产乱人免费视频| 免费国产99久久久香蕉| 亚洲综合一区国产精品| 亚洲日韩一页精品发布| 久久久久久99av无码免费网站 | 国产大片线上免费看| 在线人成免费视频69国产|