hibernate执行SQL小问题~~高分

来源:百度知道 编辑:UC知道 时间:2024/05/16 00:17:51
// 执行HQL语句
public List exeHql(final String hql) throws Exception {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
Query query = s.createQuery(hql);

List list = query.list();
return list;
}
});
}
// 执行SQL语句
public List exeSql(final String sql) throws Exception {
return getHibernateTemplate().executeFind(new HibernateCallback() {
public Object doInHibernate(Session s) throws HibernateException, SQLException {
Query query = s.createSQLQuery(sql);

List list = query.list();
return list;
}
});
}

UserDAO.java里的
这个执行SQL有点问题
而我写的执行HQL的却没有问题,请问是怎么回事呢?

List<User> list = null;
try {
list = dao.exeSql("select id from User");
} catch (Exception e) {
// TODO Auto-gen

1、Hibernate在用hql查询的时候 可以返回存储持久对象(PO)的list接口.比如 执行HQL:
from User where 1=1
它就返回一个转载持久对象User的list

2、但是用sql查询的时候它是不会返回一个持久对象的list的.它只会一个装载object[]类型的list接口。

比如执行SQL:
select id,username,password from user where 1=1

List list = null;
try {
list = dao.exeSql("select id,username,password from User");
//注意这个sql返回的是一个List<Object[]>对象
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for(Object[] o:list){ //强制转化为object[]对象,数组的长度区决于你的sql查询多少个列的数据.....
System.out.print(((Integer)o[0])+"\t"); //假设你的id为整数
System.out.print(((String)o[1])+"\t"); //username 强制转化为String对象
System.out.println(((String)o[2])); //password强制转化为String对象

}

list = dao.exeSql("select id from User");
HQL和sql语法不一样,写 id from User就可以了

hql 查询的是对象,而sql查询的是表,貌似不能将表的名字取成user表哦?你看一下你的SQL:select id from User,你可以