web-dev-qa-db-ja.com

Hibernateを使用してMysqlから最後のレコードを取得する方法は?

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

「from 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オブジェクトにオブジェクトをキャストできません、変なのですか?

ありがとうございました!サミ

14
Sami

HQLクエリが無効です。 LIMITは有効なHQL句ではありません。 Hibernateでそれを行うには、次のようにします。

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

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

クエリと取得している例外を見て、lahetysがテーブル名であり、lahetysNroが列名であると想定しています。

たとえば、次を使用する必要があります。Lahetysクラスがcomフォルダにある場合:

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

2番目の質問:

ここでは、HQLの代わりにSQLを使用しています。このような方法でSQLをhibernateで使用すると、常にList<Object[]>ではなくList<Lahetys[]>&が返されます。

7
RAS