Есть три способа, самый простой - с помощью @NamtiveQuery, но, с моей точки зрения, худший, потому что он противоречит философии JPA, второй - с менеджером сущностей, получающим и обновляющим сущность, а третий - с массивом операций.
1.- Собственный запрос
Query q1= entityManager.createNativeQuery(
" UPDATE USER_PU.AJUSTES SET VALOR = :nuevoValor1"+
" WHERE TIPO = :tipo1 AND LLAVE= :llave1;");
q1.setParameter("nuevoValor1", "Nuevo valoe 99");
q1.setParameter("tipo1", "NEW");
q1.setParameter("llave1", "PRUEBA_COMPONENTE_A");
q1.executeUpdate();
2.- Найти объект и обновить
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Ajustes> cq = cb.createQuery(Ajustes.class);
Root<Ajustes> rootAjustes = cq.from(Ajustes.class);
cq.where(
cb.and(cb.equal(rootAjustes.get(Ajustes_.tipo),"NEW"),
cb.equal(rootAjustes.get(Ajustes_.llave),"PRUEBA_COMPONENTE_A")));
//BBDD entity
Ajustes resultado = em.createQuery(cq).getSingleResult();
//Update fields
resultado.setValor("nuevoValor1");
//Persist changes
entityManager.merge(resultado);
3.- Массовая операция (новое в JPA 2.1)
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaUpdate<Ajustes> cu = cb.createCriteriaUpdate(Ajustes.class);
Root<Ajustes> rootAjustes = cu.from(Ajustes.class);
cu.set(rootAjustes.get(Ajustes_.valor), "Nuevo valoe 99");
cu.where(
cb.and(cb.equal(rootAjustes.get(Ajustes_.tipo),"NEW"),
cb.equal(rootAjustes.get(Ajustes_.llave),"PRUEBA_COMPONENTE_A")));
return entityManager.createQuery(cu).executeUpdate();