2016-09-30 16 views
0

ユーザーが入力した特定の列に値を更新したいとします。ここで私のコードは、どのように1つを修正するためにそれを修正するか?列名に基づくJPA更新

public void updateValue(String value, String id, String ww){ 
    Query q = em.createQuery("Update TableA e SET e.?1 = ?2 WHERE e.num = ?3"); 
    q.setParameter(1, ww); //since has many columns, user require to specific column to update 
    q.setParameter(2, value); 
    q.setParameter(3, id); 
    q.executeUpdate();  
} 

答えて

2

あなたがここに... JPA 2.1を使用している場合は...あなたのケースのための基準ビルダーのクエリのために行く必要がありますが、あなたが助けるため

public void updateValue(String value, String id, String ww){ 
    CriteriaBuilder cb = this.em.getCriteriaBuilder(); 

     // create update 
     CriteriaUpdate<TableAEntity> update = cb. 
     createCriteriaUpdate(TableAEntity.class); 

     // set the root class 
     Root e = update.from(TableAEntity.class); 

     // set update and where clause 
     update.set(ww, value); 
     update.where(cb.equalTo(e.get("num"), 
      id)); 

     // perform update 
     this.em.createQuery(update).executeUpdate(); 
} 
+0

感謝をやるべきことができるものですが、私はすでに把握しますそれを行う方法、私は単純な文字列を作成します。文字列s = "テーブルを更新するe eを設定する" + ww + "=?1" + "どこe.num =" + id; em.createQuery(s)を実行します。 – helloworld1234

+0

@ChongZhengLun '+'で追加している値があらかじめフィルタリングされたリストの1つであることを確認せずにこれを行うことはありません。あなたがやっていることは、データベース全体を危険にさらす可能性のある大きなセキュリティリスクです。 – coladict

関連する問題