Унарный оператор отрицания в Hibernate QL

Я пытаюсь переключить логическое поле с помощью следующего hql:

update Entity e set e.booleanField = not e.booleanField where e.id = ?1;

К сожалению, было выдано "QuerySyntaxException: неожиданный токен: не рядом...".

У меня вопрос: есть ли унарный оператор для спящего режима, который поддерживает такое выражение? Или какой-нибудь известный трюк?

sql поддерживает такие запросы (postgresql):

update entity_table set booleanField = not(booleanField);

3 ответа

Решение

Я бы просто использовал собственный SQL-запрос для этого.

Чтобы переключить логическое свойство, эквивалентное not унарный оператор, под HQL/JPQL, используйте:

UPDATE entity e SET e.booleanField = (e.booleanField=false)

Чтобы переключить логическое свойство в HQL, вы можете сделать это:

      update entity_table set booleanField = ( (booleanField + 1) % 2);

Я тестировал, и у меня все работало нормально, используя HQL. В противном случае использование (!booleanField) или (не booleanField) или (booleanField = false) не сработало.

Другие вопросы по тегам