SQL版本工作正常,我可以切换名为bar的布尔值...
mysql> update Foo set bar = ! bar WHERE id IN (1, 7, 13);
Query OK, 3 rows affected (0.02 sec)
Run Code Online (Sandbox Code Playgroud)
有没有一个简单的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();
Run Code Online (Sandbox Code Playgroud)
上面给出了一个org.hibernate.QueryException.
在我的实体中:
@Column(columnDefinition = "INTEGER", nullable = false)
private boolean bar;
Run Code Online (Sandbox Code Playgroud)
关于JPA语法的任何想法?
这可以通过case表达式来完成:
UPDATE FOO a
SET a.bar =
CASE a.bar
WHEN TRUE THEN FALSE
ELSE TRUE END
WHERE a.id in :ids
Run Code Online (Sandbox Code Playgroud)
对于可空的布尔位,需要更多:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1847 次 |
| 最近记录: |