沒有主鍵的表如何實現Hibernate映射--複合主鍵

            話說從一張沒有主鍵的表開始提及!沒有想太多,直接用常規的hibernate映射,而後出了一個意料以外的異常, 請點擊這裏看異常!


環境:Eclipse-j2ee+Tomcate6.x+mysql5.1+hibernate3.05 java

           迴歸正題,首先建一張沒有主鍵的表。命名爲person_demo.表結構以下: mysql

name Date     Type     Size
name varchar 20
age int 4

建立vo對象 sql

package com.lc.demo.vo;


import java.io.Serializable;




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


/**
 * 複合主鍵類的對應類別必須實現Serializable接口
 * 以及重寫equals和hashCode兩個方法//本身測試若是沒有重寫這兩個方法也沒有報錯
 * @author LC
 *
 */
public class Demo implements Serializable{
private String name;
private int age;

public Demo(){

}

public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}


public boolean equals(Object obj) {
       if(obj == this) {
           return true;
       }
       
       if(!(obj instanceof Demo)) {
           return false;
       }
       
       Demo demo = (Demo) obj;
       return new EqualsBuilder()
                .append(this.name, demo.getName())
                .append(this.age, demo.getAge())
                .isEquals();
       
   }
   
  public int hashCode() {
       return new HashCodeBuilder()
                .append(this.name)
                .append(this.age)
                .toHashCode();
   }

}

映射文件Demo.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="com.lc.demo.vo.Demo"
        table="person_demo" >


    <composite-id>

    <key-property name="name" column="name" type="java.lang.String">
    </key-property>

    <key-property name="age" column="age" type="java.lang.Integer">
    </key-property>

    </composite-id>
    

    </class>

</hibernate-mapping>

測試DAO apache

package com.lc.demo.dao;


import java.util.List;


import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.Test;


import com.lc.demo.hibernate.HibernateSessionFactory;
import com.lc.demo.vo.Demo;






public class DemoDAO  {


@Test 
public void query()
{
//原生態sql語句
String sql = "select {p.*} from person_demo p";
Session session = HibernateSessionFactory.getSession();


//addEntity方法指定了當前返回實體的別名,並且在SQL語句裏使用{p.*}這樣的語句,
//它的意思是向別名爲p的這個對象注入全部屬性值.
//用這個方法能夠直接把list集合中的對象直接轉換爲實體Bean

List<Demo> ls = session.createSQLQuery(sql).addEntity("p",Demo.class).list();
    if(ls.size()!=0)
    {
        for(int i=0;i<ls.size();i++)
        {
            System.out.println(ls.get(i).getName());
        }
    }

}


}
相關文章
相關標籤/搜索