Hibernate: ¿Cómo insertarías 100000 registros en Hibernate?

¿Cómo insertaríais 100000 registros en Hibernate?

Lo primero que se nos ocurre es esto:

Que con alta probabilidad (salvo que tengamos 16 Gb de memoria…) nos de un , ya que Hibernate cachea cada instancia de la clase Customer a nivel de Session.

¿Cómo evitar el temido OutOfMemory?

1) Una forma de de mejorar el rendimiento es configurar el uso de JDBC Batch (ver post). Para establecerlo se establece la propiedad de Hibernate hibernate.jdbc.batch_size (un valor sobre 50 es lo recomendado).

2) Otra forma más configurable en función de la operación es hacer el flush y el clear de la Session:

En el ejemplo:

3) Hibernate ofrece un API StatelessSession que trabaja con objetos detached y que no actúa con ninguna caché. No incluye transaccionalidad, ni chequeos. Se usa:

En la documentación de Hibernate hay un capítulo completo que trata sobre cómo mejorar el rendimiento en aplicaciones Hibernate: http://docs.jboss.org/hibernate/core/3.3/reference/en/html/performance.html, por todos los problemas que me encuentro últimamente en proyecto Hibernate debería ser de lectura obligada para los responsables técnicos 🙂

Deja un comentario