Поскольку JPA является инструментом ORM, мотивация которого состоит в том, чтобы сопоставить записи базы данных с объектами таким образом, чтобы с записями базы данных можно было работать с использованием языка программирования вместо SQL, он не поощряет использование SQL / HQL / JPQL для выполнить обновление.
Чтобы предотвратить использование склонного к ошибкам SQL или JPQL для обновления объектов, после того как вы используете CriteriaQuery
для получения списка объектов, вы можете просто перебрать объекты результата и затем изменить свойства объекта по одному для того, чтобы сделать массовое обновление или удаление. JPA должен уметь обнаруживать изменения, сделанные в этих объектах, и генерировать подходящие SQL-запросы для обновления соответствующих записей в пакете при вызове EntityManager.flush()
.