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物体上,很奇怪?
谢谢! 萨米
答案 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[]>
。