2013-02-19 23 views
4

SQL版本的作品沒關係,我可以切換稱爲酒吧布爾...JPA查詢在一個UPDATE觸發一個布爾

mysql> update Foo set bar = ! bar WHERE id IN (1, 7, 13); 
Query OK, 3 rows affected (0.02 sec) 

是否有一個簡單的JPA查詢等價,我試圖

final Set<Integer> ids; 
final Query query = em.createQuery("UPDATE " + Foo.class.getName() 
      + " a set bar= !bar" 
      + " where a.id in :ids"); 
    query.setParameter("ids", ids); 
    query.executeUpdate(); 

上面給出了一個org.hibernate.QueryException。

在我的實體:

@Column(columnDefinition = "INTEGER", nullable = false) 
private boolean bar; 

在JPA語法任何想法?

回答

5

可與CASE表達式來完成:

UPDATE FOO a 
SET a.bar = 
    CASE a.bar 
    WHEN TRUE THEN FALSE 
    ELSE TRUE END 
WHERE a.id in :ids 

更多可空布爾位需要:

UPDATE FOO a 
SET a.bar = 
    CASE a.bar 
    WHEN TRUE THEN FALSE 
    WHEN FALSE THEN TRUE 
    ELSE a.bar END 
WHERE a.id in :ids 
+0

感謝米克 - 正是我需要的。 – k1eran 2013-02-20 00:07:04

相關問題