Преобразовать SQL в предложение HQL where

#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: смотрите мой расширенный ответ