【发布时间】:2017-08-03 11:22:25
【问题描述】:
我想用一个带有枚举的条件集来更新我的节点表的所有行。 这是我写的:
private void test(final ID refId) {
final CriteriaBuilder builder = em.getCriteriaBuilder();
final CriteriaUpdate<Node> updateQuery = builder.createCriteriaUpdate(Node.class);
final Root<Node> from = updateQuery.from(Node.class);
updateQuery.set(Node_.status, builder.<Status> selectCase()
.when(builder.equal(from.get(Node_.pk).get(PK_.version), 1), Status.NEW)
.otherwise(Status.CHANGED));
updateQuery.where(builder.equal(from.get(Node_.refId), refId));
em.createQuery(updateQuery).executeUpdate();
}
但在执行查询后,“状态”列会填充某种以 4e4557 结尾的十六进制转储,表示 NEW 或 4348414e474544 表示已更改。
如果我在没有 selectCase() 的情况下更新列,则会更新正确的字符串。
updateQuery.set(Node_.status, Status.CHANGED);
我在这里运气不好(因为我没有找到任何关于在 CriteriaUpdate 中使用 selectCase() 的信息)。我必须将我的查询一分为二还是使用原生查询?
【问题讨论】:
标签: java jpa criteria-api