Почему JPA CriteriaQuery не предоставляет запрос на обновление? - PullRequest
5 голосов
/ 02 апреля 2012

CriteriaQuery в JPA2.0 предоставляет безопасный для выбора тип выбора, это здорово. Но мне интересно, почему он не обеспечивает операцию обновления / удаления? Для массового обновления / удаления вы должны вернуться к старому написанию подверженного ошибкам текста SQL или JPQL. IMO, CriteriaQuery для обновления / удаления не должен вызывать затруднений, так как обработка причины того же самого с select.

Надеюсь, это будет реализовано в следующей версии JPA.

1 Ответ

1 голос
/ 02 апреля 2012

Поскольку JPA является инструментом ORM, мотивация которого состоит в том, чтобы сопоставить записи базы данных с объектами таким образом, чтобы с записями базы данных можно было работать с использованием языка программирования вместо SQL, он не поощряет использование SQL / HQL / JPQL для выполнить обновление.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...