Na instalação padrão do Hibernate, o trecho de código Java a...

Próximas questões
Com base no mesmo assunto
Q80554 Programação
Em relação ao Hibernate 3.5.1-final, julgue os itens a seguir.

Na instalação padrão do Hibernate, o trecho de código Java abaixo permite a inserção de 200.000 linhas em uma tabela no banco de dados.

Imagem 006.jpg
Alternativas

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."

Basa, a contagem inicia de 0, não de 1. Logo seriam 200.000 registros, não fosse o problema do cache comentado pelo amigo acima.
Benjamin, o loop começa com 0(zero) mais termina com "<" que 200mil, então está certo. O ses.save(p) será executado 200mil vezes... o problema realmente é a falta do flush ou clear.

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