Hibernate + JPA -> Bulk insert - problema com desempenho

Olá. Estou utilizando o hibernate + jpa em uma aplicação minha.
Antes de poder utilizar a aplicação, eu preciso carregar algumas tabelas com dados.
Em algumas dessas tabelas, o carregamento inicial chega a 200.000 linhas.
Funciona tudo sem erro, porém de um determinado momento em diante, o desempenho cai vertiginosamente e ai o insert demora horas…

Meu código está assim:

for (X x : xs) {
	em.getTransaction().begin();
	for(int j = 0; j < maxJ; j++) {
		c = new C();
		c.set1("zzzZZZzzz");
		c.set2(x);
                em.persist(c);
		if(j % 20 == 0)
			em.flush();
	}
	em.getTransaction().commit();
}
em.close();

Obs: aquele maxJ pode chegar a 200.000

No meu persistence.xml coloquei a segunda propriedade para otimizar os inserts:

<property name="hibernate.jdbc.batch_size" value="20"/>

Alguém tem alguma sugestão para melhorar isso?

Hm … vc consegue isolar mais o problema e dizer se o hibernate demora muito para gerar o insert ou o banco demora muito para processá-lo?

Tive problemas parecidos quando eu trabalhava com Delphi mas o problema era que a base de dados demorava muito para processar a sequencia de comandos, devido a estrutura dela.

Uma tabela com muitos indices torna o insert e update muito lentos pois ela precisa ser indexada a cada comando, esse era o comportamento do firebird que usavamos.