读书人

hibernate 返回集合的有关问题

发布时间: 2012-07-31 12:33:46 作者: rapoo

hibernate 返回集合的问题
按时间查询最近的5条记录: LampStateTestInfo 为实体类 ,对应数据库表 LampStateTestInfo (oracle数据库)

[code=JavaString]
sql = "select * from (select * from LampStateTestInfo where lampID=lampID "+
order by stateTime desc) where rownum <=5";
SQLQuery query = session.createSQLQuery(sql);
query.setInteger("lampID",lampID);
query.addEntity("LampStateTestInfo", LampStateTestInfo.class);
List <LampStateTestInfo> list = query.list();
return list;
[/code]

打印结果,但是返回5条记录都是一样的 都是最后一条;
拿SQL语句在ORACLE单独测试返回的是最近的5条不同的记录,符合要求。
怎么会不一致,求解·

[解决办法]

Java code
sql = "select * from LampStateTestInfo where lampID=lampID "+order by stateTime desc";SQLQuery query  = session.createSQLQuery(sql);query.setInteger("lampID",lampID);query.addEntity("LampStateTestInfo", LampStateTestInfo.class);query.setFirstResult(0);query.setMaxResults(5);List <LampStateTestInfo> list = query.list();
[解决办法]
debug打印出hibernate转化HQL后的sql是什么,然后用这个sql去查一下什么结果
[解决办法]
加了query.setFirstResult(0);
query.setMaxResults(5);
后,sql也改了,你改了吗?
sql = "select * from LampStateTestInfo where lampID=lampID "+
order by stateTime desc";
[解决办法]
加了
query.setFirstResult(0);
query.setMaxResults(5);
sql 也改成了 select * from LampStateTestInfo where lampID=? order by stateTime desc

这就不应该再出错了。


楼主
sql 改成 select * from LampStateTestInfo where lampID=? order by stateTime desc
然后不加下面这两行
query.setFirstResult(0);
query.setMaxResults(5);

看是不是按时间排序,且都查询出了。
[解决办法]
你在怎么检测的结果都是相同记录?
[解决办法]
是不是有时间相同的纪录?其他字段不一样?
[解决办法]
建议加断点调试...
[解决办法]
直接把 lampID 参数写死,然后 数据库 和 Java两端都测试下同一句话,类似:

String sql = "select * from LampStateTestInfo where lampID=100 order by stateTime desc"

看看有何效果。
[解决办法]
改成
sql = "select * from LampStateTestInfo where lampID=lampID and rownum <=5 "+
"order by stateTime desc)";
试试看

读书人网 >J2EE开发

热点推荐