2012-04-25 40 views
7

我嘗試使用下面的HQL切換布爾字段:在Hibernate中QL求反一元運算符

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

不幸「QuerySyntaxException:意外的標記:附近沒有......」被拋出。

我的問題是:是否有一些支持這種表達式的hibernate的一元運算符?或者任何知名的技巧?

SQL支持這樣的查詢(PostgreSQL的):

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

[據稱](http://docs.jboss.org/hibernate/orm/3.3/ reference/en/html/queryhql.html#queryhql-expressions)HQL在表達式中支持'not',但我不確定這是否適用於where子句之外的表達式。你可能想嘗試一個常見的破解'set e.booleanField = 1 - e.booleanField'來解決這個問題。 – dasblinkenlight 2012-04-25 14:25:37

+0

對不起,沒有工作。 「錯誤:運算符不存在:integer - 布爾值」 – 2012-04-26 05:35:18

+3

這是表達'NOT'的另一種黑客方法:set e.booleanField =(e.booleanField == false)'。 – dasblinkenlight 2012-04-26 09:45:38

回答

1

我只想用原生SQL查詢這一點。

2

要切換布爾屬性,相當於not一元運算符,下HQL/JPQL,使用:

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