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オブジェクトにオブジェクトをキャストできません、変なのですか?
ありがとうございました!サミ
HQLクエリが無効です。 LIMITは有効なHQL句ではありません。 Hibernateでそれを行うには、次のようにします。
Query query = session.createQuery("from lahetys order by lahetysNro DESC");
query.setMaxResults(1);
Lahetys last = (Lahetys) query.uniqueResult();
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[]>
&が返されます。