2012-04-25 22 views
7

Estoy intentando cambiar campo booleano utilizando la siguiente HQL:Negar operador unitario en Hibernate QL

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

desgracia "QuerySyntaxException: símbolo inesperado: no cerca ..." fue lanzado.

Mi pregunta es: ¿hay algún operador unario para hibernar que admita esa expresión? O cualquier truco bien conocido?

SQL soporta este tipo de consultas (PostgreSQL):

update entity_table set booleanField = not(booleanField); 
+0

[Supuestamente] (http://docs.jboss.org/hibernate/orm/3.3/ reference/es/html/queryhql.html # queryhql-expressions) HQL admite 'no' en las expresiones, pero no estoy seguro de si eso se aplica a las expresiones fuera de la cláusula' where'. Puede intentar un hack 'conjunto común e.booleanField = 1 - e.booleanField' para evitar este problema. – dasblinkenlight

+0

Lo siento, no funciona. "ERROR: el operador no existe: integer - booleano" –

+3

Aquí hay otra forma de hackear para expresar 'NOT':' establecer e.booleanField = (e.booleanField == false) '. – dasblinkenlight

Respuesta

1

me acaba de utilizar una consulta SQL nativo para esto.

2

para alternar la propiedad booleana, equivalente al operador unario not, bajo HQL/JPQL, uso:

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