#java #mysql #hibernate #hql
#java #mysql #переход в спящий режим #hql
Вопрос:
это должно быть легко, но мое приложение выдает постоянную ошибку, и я новичок в гибернации.
Я пытаюсь создать простой запрос HQL в моем веб-приложении, используя Hibernate.
Я хочу выполнить следующий SQL-запрос:
SELECT * FROM deal WHERE deal_status='A' OR WHERE deal_status='O';
Похоже, что HQL не работает с предложением or, вот мои текущие инструкции HQL в моем веб-приложении:
FROM deal d where d.deal_status='O' or d.deal_status='A' order by d.id
Спасибо за любую справку по запросу Hibernate
С уважением, Алекс
Комментарии:
1. Опубликуйте ваше исключение ошибки, и вы знаете, что HQL основан на ваших классах сущностей, а не на вашей схеме DB?
2. В вашем SQL есть синтаксическая ошибка: вы должны написать только один WHERE
3. это была моя глупая проблема, спасибо, джиши!!
Ответ №1:
- HQL основан на названии полей вашей сущности, не относящейся к вашему классу, и именах классов
c.id
— c не определен
Я настоятельно предполагаю, что поля в Deal (Classname первая буква в верхнем регистре) являются не deal_status
, а статусом, тогда запрос должен быть таким. (Я пропустил c.id материал, потому что я понятия не имею, что вы имеете в виду под этим.)
SELECT d FROM Deal d WHERE d.status='O' or d.status=`A`
Обратите внимание на верхнюю букву D в Deal
И это сработает, только если Deal.status является строкой или чем-то подобным, но не в том случае, если это перечисление. Один из способов обработки перечисления заключается в следующем:
Query query = session.createQuery(
"SELECT d FROM Deal d WHERE d.status=:o or d.status=:a");
query.setParameter("a", MyEnum.A);
query.setParameter("o", MyEnum.O);
Комментарии:
1. Как вы это делаете с типом ENUM?? поскольку это одно!!
2. <столбец свойств=»deal_status» длина=»1″ имя =»dealStatus» not-null=»true»> <имя типа=»nl.strohalm.cyclos.utils. переход в спящий режим. StringValuedEnumType»> <имя параметра=»enumClassName»>nl.strohalm.cyclos.entities.coupon. Купон$DealStatus</параметр> </тип> </свойство>
3. @Alexander Grosse: смотрите мой расширенный ответ