En el post anterior les comentaba mi problema con un ejb remoto y la entidad jpa que este me devolvía, bueno al final les mencione que si tienen que acceder a las relaciones lazy deben inicializarlas, aquí les dejo como cargar las relaciones lazy con un query hint
Creamos el query
Query query = entityManager.createQuery("select p from Person p where p.id = :id");
query.setParameter("id", 10);
Para colocar el query hint hacemos los sigueinte
query.setHint("eclipselink.join-fetch", "p.telefonos" );
Person p = query.getSingleResult();
Ahora en el objeto p sus telefonos ya estan cargados, desafortunadamente si en telefonos su objeto tiene otra relación a la que queremos acceder tendremos que inicializarla también pero seria con código o bueno no encontré una forma de hacerlo con otro queryhint, si la encuentran pues espero me la digan.
Esto solo tenemos que hacerlo cuando invocamos desde una aplicación un ejb remoto que devuelve una entidad jpa y usamos eclipselink de lo contrario al acceder a una relación no inicializada nos lanzara una excepción que nos indica que debemos inicializarla, si trabajamos las entidades en ejb locales no es necesario inicializar las relaciones, eclipselink lo hace en cuanto se intente acceder a ella
martes, 7 de febrero de 2012
Eclipselink Join Fetch - Cargar Relaciones Jpa
Etiquetas:
eclipselink,
fetch,
java,
jpa,
queryhint,
relations lazy
Suscribirse a:
Enviar comentarios (Atom)
No hay comentarios:
Publicar un comentario