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

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

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

    Hibernate復合主鍵的處理(一)

    復合主鍵,由多個字段組成主鍵,例如,使用firstname和lastname組成主鍵。

    可以通過兩種方式確定主鍵,一種是基于實體類的復合主鍵,另一種是通過定義主鍵類來實現。
    不管通過哪種方式,復合主鍵都需要實現equals方法和hashcode方法,以作為不同數據之間是別的標志。

    一.基于實體類屬性的復合主鍵
    主鍵由實體類中的屬性組成。

    1.
    配置文件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">
            
    <composite-id>
                
    <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.
    TUser.java
    package cn.blogjava.start;

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

    /**
     * TUser generated by hbm2java
     
    */

    public class TUser implements java.io.Serializable {

        
    // Fields    

        
    private Integer age;

        
    private String firstname;

        
    private String lastname;

        
    public Integer getAge() {
            
    return age;
        }

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

        
    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
     TUser)) {
                
    return false
    ;
            }
            
            TUser user 
    =
     (TUser)obj;
            
    return new
     EqualsBuilder()          // EqualsBuilder 和HashCodeBuilder均為apache common lang包中的工具類
                .appendSuper(
    super
    .equals(obj))
                .append(
    this
    .lastname, user.lastname)
                .append(
    this
    .firstname, user.firstname)
                .isEquals();        
        }
        
        
    public int
     hasCode() {
            
    return new HashCodeBuilder(-528253723-475504089
    )
                .appendSuper(
    super
    .hashCode())
                .append(
    this.lastname).append(this
    .firstname)
                .toHashCode();
                
        }


    }

    3.
    測試類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();
                user.setFirstname(
    "bai");
                user.setLastname(
    "yunfeng");
                user.setAge(
    26);
                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(){
            TUser user 
    = new TUser();
            user.setFirstname(
    "bai");
            user.setLastname(
    "yunfeng");
            
            user 
    = (TUser)session.load(TUser.class, user);
            Assert.assertEquals(user.getAge().intValue(), 
    26
    );
        }
    }

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

    評論

    # re: Hibernate復合主鍵的處理(一) 2006-10-22 21:51 hibernate初學者

    你好!
    我的代碼如下:
    User.java
    ...

    User.hbm.xml

    <?xml version="1.0" encoding="utf-8"?>
    <!DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <class name="onlyfun.caterpillar.user" table="user" catalog="sample">

    <composite-id>
    <key-property name="name"
    column="name"
    type="java.lang.String"/>
    <key-property name="phone"
    column="phone"
    type="java.lang.String"/>
    </composite-id>
    <property name="age" column="age" type="java.lang.Integer"/>
    </class>

    </hibernate-mapping>

    HibernateTest.java
    ...

    build.xml:
    <project name="JNameIt" default="all">
    <target name="setProperties" description="setup the common properties">
    <property name="src.dir" value="src"/>
    <property name="images.dir" value="images"/>
    <property name="classes.dir" value="classes"/>
    <property name="lib.dir" value="lib"/>
    </target>

    <path id="1">
    <fileset dir="lib">
    <include name="**/*.jar"/>
    </fileset>
    </path>

    <path id="class.path">
    <!-- Include our own classes, of course -->
    <pathelement location="${classes.dir}" />
    <!-- Include jars in the project library directory -->
    <fileset dir="lib">
    <include name="*.jar"/>
    </fileset>
    <pathelement path ="${classpath}"/>

    </path>

    <taskdef name="schemaexport"
    classname="org.hibernate.tool.hbm2ddl.SchemaExportTask"
    classpathref="class.path"/>

    <schemaexport
    properties="classes/hibernate.properties"
    quiet="no"
    text="no"
    drop="no"
    delimiter=";"
    output="/schema-export.sql">
    <fileset dir="images">
    <include name="*.hbm.xml"/>
    </fileset>
    </schemaexport>


    <target name="clean" depends="setProperties" description="clean up the previous built files or dirs">
    <delete dir="${classes.dir}"/>
    <delete file="${jar.file}"/>
    </target>

    <target name="prepareDir" depends="setProperties" description="prepare necessary dirs">
    <mkdir dir="${classes.dir}"/>
    <mkdir dir="${lib.dir}"/>
    <!--
    <copy todir="${classes.dir}/images">
    <fileset dir="${images.dir}"/>
    </copy>
    -->
    </target>

    <target name="compile" depends="prepareDir" description="compile the source files">
    <javac srcdir="./src" destdir="${classes.dir}"
    classpathref="1"/>
    <copy todir="${classes.dir}/onlyfun/caterpillar">
    <fileset dir="${images.dir}"/>
    </copy>
    </target>

    <target name="run" depends="compile">

    <java fork="true" classname="onlyfun.caterpillar.HibernateTest" classpathref="1">
    <classpath path="${classes.dir}"/>
    </java>
    </target>

    <target name="all" depends="clean" description="perform all targets"/>
    </project>

    User.java,hibernate.java放在WEB-INF/SRC 下,User.hbm.xml放在WEB-INF/images下,build.xml放在WEB-INF,
    程序結構和你基本一樣,為什么用ant run 時出現:
    D:\Apache Software Foundation\Tomcat 5.5\webapps\HibernateTest\WEB-INF\build.xml
    :35: Schema text failed: component class not found: onlyfun.caterpillar.User的錯誤!好長時間都沒解決,網上也找不到類似的錯誤!
    謝謝你幫忙看一下!  回復  更多評論   

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

    導航

    常用鏈接

    隨筆分類(27)

    隨筆檔案(28)

    搜索

    最新評論

    主站蜘蛛池模板: 日韩免费高清视频网站| 四虎永久精品免费观看| 久久精品国产亚洲av麻豆色欲 | 国产精品亚洲一区二区三区| 久久成人无码国产免费播放| 亚洲AV伊人久久青青草原| 亚洲手机中文字幕| 曰批全过程免费视频播放网站| 亚洲深深色噜噜狠狠爱网站| japanese色国产在线看免费| 亚洲人成影院在线观看| 亚洲爆乳成av人在线视菜奈实| 黄网址在线永久免费观看| 久久精品国产亚洲AV| 免费亚洲视频在线观看| 尤物视频在线免费观看| 国产亚洲大尺度无码无码专线 | 亚洲色大成网站www久久九| 成人免费无毒在线观看网站| 亚洲AV无码一区二区一二区| 国产男女猛烈无遮挡免费视频 | 天天影视色香欲综合免费| 亚洲依依成人精品| 成年在线观看免费人视频草莓| 亚洲人成电影网站色www| 国产v片免费播放| 一级大黄美女免费播放| 亚洲精品国产美女久久久| 日韩精品无码免费一区二区三区| 亚洲精品熟女国产| 性色av免费观看| 亚洲一级在线观看| 天天看片天天爽_免费播放| 亚洲成AV人片高潮喷水| 亚洲精品国产成人影院| 国产在线精品免费aaa片| 亚洲精品国产福利在线观看| 午夜高清免费在线观看| 五月天国产成人AV免费观看| 亚洲成A人片在线观看WWW| 国产在线观看免费观看不卡|