2012-10-25 204 views
11
List<Lahetys> last = session.createQuery("from lahetys order by lahetysNro DESC LIMIT 1").list(); 

和我的日誌:如何使用Hibernate從Mysql獲取最後一條記錄?

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 

了什麼happend 「從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對象,怪異?

謝謝! Sami

回答

20

您的HQL查詢無效。 LIMIT不是有效的HQL子句。要在Hibernate中做到這一點,只需做

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

感謝您的回答!我得到了同樣的異常:--- AsekorjausHelper.getLastLahetysNro()---- 信息:休眠:從lahetysNro DESC限制中選擇順序? 警告:SQL錯誤:1064,SQLState:42000 錯誤:您的SQL語法有錯誤;檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的'from order by lahetysNro DESC limit 1'附近使用正確的語法。 INFO:EXCEPTION OCCURED ----->您的SQL語法錯誤;請查看與您的MySQL服務器版本相對應的手冊,以便在第1行的'from lahetysNro DESC limit 1'附近使用正確的語法。 – Sami

+1

請參閱@RAS答案。 HQL使用實體,映射字段/屬性和關聯。從不表和名稱。 –

6

當你使用HQL時,你應該指定完全限定的className而不是tableName。您應該指定propertyName而不是columnName。另請注意,兩者都區分大小寫。

看你的查詢&你得到的例外,我假設lahetys是你的表名& lahetysNro是你的列名。

你應該例如使用:如果您Lahetys類位於com文件夾:

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

對於您的第二個問題:

在這裏,你已經使用的,而不是HQL SQL。 以這種方式使用SQL進行休眠時,它始終返回List<Object[]> &而不是List<Lahetys[]>

+3

錯誤的解決方案:org.hibernate.hql.internal.ast.QuerySyntaxException:意外的標記:限制在第1行附近....使用.setMaxResults(1) – demon101

+3

這個答案是不正確的。請參閱@ demon101的評論。 – Kenci

+0

@ demon101,我不關注這裏的限制相關的事情。這是OP用過的東西,我不是在談論它。我只是解釋OP收到的例外情況,他應該如何解決這些例外情況。限制的使用與此處的上下文完全不同。 – RAS

相關問題