2017-08-03 68 views
0

我想用一個Enum條件集更新我的節點表的所有行。 這裏是我寫的:帶有selectCase插入的JPA CriteriaUpdate HEX

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

但執行列「狀態」充滿了某種形式的十六進制轉儲的查詢後結束或者4e45574348414e474544CHANGED

如果我更新沒有selectCase()的列,則更新正確的String。

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

我在這裏運氣不好(因爲我沒有在CriteriaUpdate中找到關於selectCase()的用法的任何信息)。我是否必須將查詢分解爲兩個或使用本地查詢?

回答

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