日期:2014-05-17  浏览次数:20666 次

HibernateTemplate执行自定义SQL不知道哪里错了
import java.sql.SQLException;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.classic.Session;
import org.springframework.orm.hibernate3.HibernateCallback;
import org.springframework.orm.hibernate3.HibernateTemplate;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.laoer.bbscs.bean.UserInfo;

public class UserInformation extends HibernateDaoSupport {

public String getUserandpassword() {

HibernateTemplate tmpl = this.getHibernateTemplate();

List<UserInfo> list = tmpl
.execute(new HibernateCallback<List<UserInfo>>() {
@Override
public List<UserInfo> doInHibernate(Session session)
throws HibernateExceptionSQLException {
SQLQuery query = session
.createSQLQuery("select * from user");

List results = query.list();
return (List<UserInfo>) results;
}

});

return list.toString();
}

}

============
以上代码Eclipse老提示 List<UserInfo> list = tmpl
.execute(new HibernateCallback<List<UserInfo>>() {
这里有问题,高人知道是什么原因吗?

------解决方案--------------------
你实现接口,重写接口方法,怎么能人家的 方法返回值变了,,,List<UserInfo>------->Object

不知道对没

------解决方案--------------------
而且我觉得,应该对List<UserInfo> list = (List<UserInfo>)tmpl.execute(new HibernateCallback<List<UserInfo>>() {.........}强转,,,不知道对没。。
------解决方案--------------------
(List<UserInfo>) results;  
这里 你的results查出来是一个list里放的map,List<Map> 的对象强转成List<UserInfo> 。

1,你可以返回值改成List<Map>。


2,你也可以修改你的sql语句 ,
SQLQuery query = session
.createSQLQuery("select {u.*} from user");
query.addEntity("u",UserInfo.class);
return query.list();



------解决方案--------------------
SQL这里的user 应该是表名 而不是映射的类名。