JPA - Atualização em lote / em massa - Qual é a melhor abordagem?
Descobri que o JPA não suporta a seguinte atualização:
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
Então eu tenho duas opções:
Opção 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();
}
Questões:
Isso é tudo o que é necessário para atualização em lote? Mais alguma coisa que eu preciso adicionar? eu colocohibernate.jdbc.batch_size", "20"
O bloqueio otimista está ativado aqui por padrão? (Eu não tenho @Version na minha entidade embora)O que preciso fazer para aplicar o Bloqueio Otimista, se não for @Version?Opção 2:
Construa uma única consulta usandoSelect Case
sintaxe ou comCriteria API
Questões:
O lote ainda acontece aqui? (Em uma única grande consulta)Isso é melhor que a primeira abordagem em termos de desempenho?Qual é a abordagem recomendada dessas duas opções? Qualquer outra abordagem melhor?