Skip to content
Advertisement

JPA update based on column name

I want to update value to a specific column entered by the user. Here are my codes, do anyone how to modify it to correct one?

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

Advertisement

Answer

You should go for criteria builder query for your case… if you are using JPA 2.1.. here is something you can should do

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();
}
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement