如何使用Hibernate从Mysql获取最后一条记录?

时间:2012-10-25 13:28:11

标签: mysql sql hibernate hql

List<Lahetys> last = session.createQuery("from lahetys order by lahetysNro DESC LIMIT 1").list();

在我得到的日志中:

INFO: Hibernate: select  from order by  lahetysNro DESC LIMIT 1
WARN: SQL Error: 1064, SQLState: 42000
ERROR: You have an error in your SQL syntax; check the manual that corresponds to your       MySQL server version for the right syntax to use near 'from order by  lahetysNro DESC LIMIT 1' at line 1

“来自LAHETYS”发生了什么?使用HQL或/和SQL处理它的最佳实践是什么?

另一个问题:

Lahetys last = (Lahetys)session.createSQLQuery("select * from lahetys order by lahetysNro DESC LIMIT 1").uniqueResult();
session.getTransaction().commit();  

我得到一个例外:

Ljava.lang.Object; cannot be cast to Lahetys 

所以我不能把一个物体投射到我的Lahetys物体上,很奇怪?

谢谢! 萨米

2 个答案:

答案 0 :(得分:24)

您的HQL查询无效。 LIMIT不是有效的HQL子句。要在Hibernate中执行此操作,只需执行

Query query = session.createQuery("from lahetys order by lahetysNro DESC");
query.setMaxResults(1);
Lahetys last = (Lahetys) query.uniqueResult();

答案 1 :(得分:6)

当您使用HQL时,应指定完全限定的className而不是tableName。您应该使用相同的方式指定propertyName而不是columnName。还要记住,两者都是区分大小写的。

查看您的查询&amp;你得到的例外,我假设 lahetys 是你的表名&amp; lahetysNro 是您的专栏名称。

您应该使用例如:如果您的 Lahetys 类位于com文件夹:

List<Lahetys> last = session.createQuery("from com.Lahetys order by lahetysNro DESC LIMIT 1").list();

对于你的第二个问题:

这里您使用的是SQL而不是HQL。 当你以这种方式使用SQL和hibernate时,它总是返回List<Object[]>&amp;不是List<Lahetys[]>