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?

questionAnswers(3)

yourAnswerToTheQuestion