Na instalação padrão do Hibernate, o trecho de código Java a...
Comentários
Veja os comentários dos nossos alunos
Texto retirado do manual de referência que acompanha o Hibernate:
"Isto irá falhar com um OutOfMemoryException em algum lugar próximo a linha 50.000. Isso ocorre
devido ao fato do Hibernate fazer cache de todas as instâncias de Pessoa inseridas num cache
em nível de sessão."
Para a inserção das 20.000 linhas o código correto seria o seguinte:
Session ses = sessionFactory.openSession();
Transaction trans = session.beginTransaction();
for ( int i=0; i<200000; i++ ) {
Pessoa p = new Pessoa();
ses.save(p);
if ( i % 20 == 0 ) { //20, same as the JDBC batch size
//flush a batch of inserts and release memory:
ses.flush();
ses.clear();
}
}
trans.commit();
ses.close();
"Quando você estiver inserindo novos objetos persistentes, vocês deve executar os métodos
flush() e clear() regularmente na sessão, para controlar o tamanho do cache primário."
O fato de não ter sido construído o objeto sessionFactory também é um erro na questão. Ou não?
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo