2016-09-30 3 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

спасибо за помощь, но я уже выяснить как это сделать, я просто создаю простую строку. Строка s = "Обновить таблицу A e SET e." + ww + "=? 1" + "WHERE e.num =" + id; Затем введите em.createQuery (s), который работает. – helloworld1234

+0

@ChongZhengLun НИКОГДА не делайте этого, не убедившись, что значение, добавляемое с помощью '+', является одним из предварительно отфильтрованных списков. То, что вы делаете, представляет собой серьезную угрозу безопасности, которая может поставить под угрозу всю вашу базу данных. – coladict