我想用带有Enum的条件集更新我的Node-table的所有行。 这是我写的:
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();
}
但是在执行查询后,列'status'填充了某种以 4e4557 结尾的十六进制转储 NEW 或 4348414e474544 已更改。
如果我在没有selectCase()的情况下更新列,则会更新正确的String。
updateQuery.set(Node_.status, Status.CHANGED);
我在这里运气不好(因为我在CriteriaUpdate中没有发现任何关于selectCase()的用法)。我是否必须将查询拆分为两个或使用本地查询?
答案 0 :(得分:0)
由于似乎没有人有这个问题,我没有深入研究它......
我使用原生查询
String query = "UPDATE NODE SET STATUS =
CASE WHEN VERSION = 1 THEN 'NEW' ELSE 'CHANGED' END
WHERE REF_ID = :refId";
em.createNativeQuery(query).setParameter("refId", refId.getId()).executeUpdate();