Унарный оператор отрицания в 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 ответа
Решение
Чтобы переключить логическое свойство, эквивалентное 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) не сработало.