【问题标题】:JPA CriteriaUpdate with selectCase inserts HEX带有 selectCase 的 JPA CriteriaUpdate 插入 HEX
【发布时间】: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 结尾的十六进制转储,表示 NEW4348414e474544 表示已更改

如果我在没有 selectCase() 的情况下更新列,则会更新正确的字符串。

updateQuery.set(Node_.status, Status.CHANGED);

我在这里运气不好(因为我没有找到任何关于在 CriteriaUpdate 中使用 selectCase() 的信息)。我必须将我的查询一分为二还是使用原生查询?

【问题讨论】:

    标签: java jpa criteria-api


    【解决方案1】:

    由于似乎没有人有这个问题,我没有深入研究它......

    我使用原生查询

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

    【讨论】:

      猜你喜欢
      • 2015-09-20
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 2020-03-13
      • 2022-12-13
      • 2021-01-21
      • 2013-11-27
      • 1970-01-01
      相关资源
      最近更新 更多