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)
在使用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[]>.