请点击这里看异常!
环境:Eclipse-j2ee+Tomcate6.x+mysql5.1+hibernate3.05
回归正题,首先建一张没有主键的表。命名为person_demo.表结构如下:
name
Date Type
Size
name
varchar
20
age
int
4
创建vo对象
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
/p>
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
>
name="com.lc.demo.vo.Demo"
table="person_demo" >
测试DAO
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 ls = session.createSQLQuery(sql).addEntity("p",Demo.class).list();
if(ls.size()!=0)
{
for(int i=0;i
{
System.out.println(ls.get(i).getName());
}
}
}
}