2012-04-25 12 views
7

Sto cercando di cambiare campo booleano utilizzando il seguente HQL:Negate operatore unario in Hibernate QL

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

Purtroppo "QuerySyntaxException: token imprevisto: non vicino ..." è stato gettato.

La mia domanda è: c'è qualche operatore unario per l'ibernazione che supporta tale espressione? O qualche trucco noto?

SQL supporta tali query (PostgreSQL):

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

[Presumibilmente] (http://docs.jboss.org/hibernate/orm/3.3/ reference/it/html/queryhql.html # queryhql-espressioni) HQL supporta 'not' nelle espressioni, ma non sono sicuro che ciò si applichi alle espressioni al di fuori della clausola' where'. Potresti provare un comune hack 'set e.booleanField = 1 - e.booleanField' per ovviare a questo problema. – dasblinkenlight

+0

Spiacente, non funziona. "ERRORE: operatore inesistente: intero - booleano" –

+3

Ecco un altro modo per esprimere "NON':' set e.booleanField = (e.booleanField == false) '. – dasblinkenlight

risposta

1

vorrei solo usare una query SQL nativo per questo.

2

per alternare la proprietà booleana, equivalente alla operatore unario not, sotto HQL/JPQL, uso:

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