2016-09-30 91 views
0

我想將值更新爲用戶輸入的特定列。這裏是我的代碼,做任何人如何修改它來糾正一個?根據列名稱進行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

感謝,但我已經弄清楚如何做到這一點,我只是創建簡單的字符串。 String s =「更新表格SET e。」 + ww +「=?1」+「WHERE e.num =」+ id;然後把em.createQuery(s),這是工作。 – helloworld1234

+0

@ChongZhengLun不會確保您使用'+'添加的值是預先過濾的列表之一。你所做的是一個可能危及整個數據庫的重大安全風險。 – coladict