6

SQL バージョンは正常に動作し、bar というブール値を切り替えることができます ...

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構文に関するアイデアはありますか?

4

1 に答える 1

8

これは、case 式を使用して実行できます。

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

nullable Boolean の場合は、もう少し必要です。

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
于 2013-02-19T20:06:57.557 に答える