使用selectCase的JPA CriteriaUpdate插入HEX

时间:2017-08-03 11:22:26

标签: java jpa criteria-api

我想用带有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()的用法)。我是否必须将查询拆分为两个或使用本地查询?

1 个答案:

答案 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();