Как получить последнюю запись из Mysql с помощью Hibernate?
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
Что случилось с "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, странный?
Спасибо!
Сами
Ответы
Ответ 1
Ваш запрос HQL недействителен. LIMIT не является допустимым предложением HQL. Чтобы сделать это в Hibernate, просто сделайте
Query query = session.createQuery("from lahetys order by lahetysNro DESC");
query.setMaxResults(1);
Lahetys last = (Lahetys) query.uniqueResult();
Ответ 2
Когда вы используете HQL, вы должны указать полное имя класса, а не имя таблицы. Точно так же вы должны указать свойствоName вместо columnName. Также имейте в виду, что оба чувствительны к регистру.
Глядя на ваши запросы и исключение, которое вы получаете, я предполагаю, что lahetys - это имя вашей таблицы, а lahetysNro - ваше имя столбца.
Вам следует использовать, например: Если ваш класс Lahetys находится в папке com
:
List<Lahetys> last = session.createQuery("from com.Lahetys order by lahetysNro DESC LIMIT 1").list();
Для вашего второго вопроса:
Здесь вы использовали SQL вместо HQL.
Когда вы используете SQL с hibernate таким образом, он всегда возвращает List<Object[]>
, а не List<Lahetys[]>
.