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

Sam*_*ami 13 mysql sql hibernate hql

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

在我得到的日志中:

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
Run Code Online (Sandbox Code Playgroud)

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

另一个问题:

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

我得到一个例外:

Ljava.lang.Object; cannot be cast to Lahetys 
Run Code Online (Sandbox Code Playgroud)

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

谢谢!萨米

JB *_*zet 24

您的HQL查询无效.LIMIT不是有效的HQL子句.要在Hibernate中做到这一点,就这样做

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


RAS*_*RAS 7

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

看看你的查询和你得到的例外情况,我假设lahetys是你的表名和lahetysNro是你的列名.

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

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

对于你的第二个问题:

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

  • 错误的解决方案:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的令牌:限制在第1行附近....使用.setMaxResults(1) (3认同)
  • 这个答案是不正确的.请参阅@ demon101的评论. (3认同)