2012-10-25 14 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 

"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()---- INFO:休止状態:lahetysNro DESC制限による注文から選択しますか? WARN:SQLエラー:1064、SQLState:42000 エラー:SQL構文にエラーがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックして、適切な構文を使用して、1行目の 'order by lahetysNro DESC limit 1'の近くで使用してください。 INFO:EXCEPTION OCCURED -----> SQL構文に誤りがあります。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックしてください。右の構文では、1行目の 'order by lahetysNro DESC limit 1'の近くで使用します。 – Sami

+1

@RAS answerを参照してください。 HQLは、エンティティ、マップされたフィールド/プロパティ、および関連付けを使用します。テーブル名とカラム名は使用しないでください。 –

6

HQLを使用している場合は、tableNameの代わりに完全修飾classNameを指定する必要があります。同じ方法で、columnNameの代わりにpropertyNameを指定する必要があります。また、両方とも大文字と小文字を区別していることに注意してください。

あなたのクエリを見て&あなたが取得している例外は、私がlahetysがlahetysNroあなたのテーブル名& であることを仮定していることはあなたの列名です。

あなたは、たとえば使用する必要があります:あなたの第二の質問について

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

:あなたのLahetysクラスはcomフォルダに配置されている場合はここ

あなたの代わりに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が受け取った例外と彼がそれらを修正する方法を説明するだけです。 'limit'の使用法は全く別の点であり、ここでのコンテキスト外です。 – RAS

関連する問題