JPA - Пакетное / массовое обновление - Какой подход лучше?
Я обнаружил, что JPA не поддерживает следующее обновление:
Update Person p set p.name = :name_1 where p.id = :id_1,
p.name = :name_2 where p.id = :id_2,
p.name = :name_3 where p.id = :id_3
....
// It could go on, depending on the size of the input. Could be in 100s
Итак, у меня есть два варианта:
Опция 1:
Query q = em.createQuery("Update Person p set p.name = :name where p.id = :id");
For ( int x=0; PersonsList.length; x++ ) {
// add name and id parameters
em.executeUpdate();
}
Вопросов:
Это все, что нужно для пакетного обновления? Что-нибудь еще, что я должен добавить? Я поставилhibernate.jdbc.batch_size", "20"
Оптимистическая блокировка включена здесь по умолчанию? (У меня нет @Version в моей сущности, хотя)Что мне нужно сделать, чтобы применить оптимистическую блокировку, если не @Version?Вариант 2:
Создайте один запрос, используя либоSelect Case
синтаксис или сCriteria API
Вопросов:
Пакетирование все еще происходит здесь? (В одном большом запросе)Это лучше, чем первый подход с точки зрения производительности?Каков рекомендуемый подход из этих двух вариантов? Любой другой лучший подход?