Evita usar lazy collections en JPA

Estándar

Hace poco vi un artículo en JavaCodeGeeks, concretamente via su twitter, titulado Avoid Lazy JPA Collections que me recordó los quebraderos de cabeza que pueden dar las colecciones vagas (lazy) en los frameworks ORM JPA.

Básicamente al declarar una relación de tipo uno a muchos o muchos a muchos esta se mapea en nuestra clase como una colección de elementos. Cuando queremos recuperar de la base de datos un objeto que contenga una de estas relaciones, la colección no se recuperará de la base de datos automáticamente a menos que la usemos de manera explícita antes de cerrar la sesión con la base de datos. Esto pretende ser una mejora del rendimiento, evitando uniones extra en la base de datos, pero resulta ser al final otra razón más para los programadores expertos de quejarse al usar un ORM como Hibernate. La libertad inicial que tiene el programador es bastante limitada y la librería intenta hacerlo todo por ti, cuando a veces no es necesario.

Este tipo de colecciones nos lleva a tener que forzar la obtención de las mismas cuando obtenemos un objeto que las contenga (usando el método Hibernate.initialize(…)) o modificar el acceso a la colección para que sea de tipo eager, lo cual la obtendría siempre.

Moraleja: hay que llevar cuidado con las herramientas que nos hacen la vida más fácil porque pueden estar complicándonosla por otro sitio aún más enrevesado.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s