2017-08-03 15 views
0

ノードテーブルのすべての行を列挙型の条件付きセットで更新したいとします。ここ は、私が書いたものである:JPA selectCaseを挿入した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(); 
} 

しかし、列「ステータスが」CHANGED ためNEWまたは4348414e474544ため4e4557のいずれかで終わる進ダンプのいくつかの種類が充填されたクエリを実行した後、

selectCase()を使わずに列を更新すると、正しい文字列が更新されます。

私はここで運が悪いです(CriteriaUpdateのselectCase()の使い方については何も見つかりませんでした)。クエリを2つに分割したり、ネイティブクエリを使用する必要がありますか?

答えて

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(); 
と一緒に行きました
関連する問題