14
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 对象上,奇怪吗?

谢谢!萨米人

4

2 回答 2

30

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

Query query = session.createQuery("from lahetys order by lahetysNro DESC");
query.setMaxResults(1);
Lahetys last = (Lahetys) query.uniqueResult();
于 2012-10-25T14:13:00.983 回答
8

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

查看您的查询和遇到的异常,我假设lahetys是您的表名,而 lahetysNro是您的列名。

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

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

对于你的第二个问题:

在这里,您使用了 SQL 而不是 HQL。当您以这种方式将 SQL 与 hibernate 一起使用时,它总是返回List<Object[]>& not List<Lahetys[]>

于 2012-10-25T14:25:19.523 回答