2012-06-12 13 views
5

Usando el JPA EntityManager y el objeto JPA Query, ¿cómo puedo anular algo que tiene la anotación @OneToMany (fetch = FetchType.EAGER) para ser extraído perezosamente en una consulta?Cómo reemplazar FetchType.EAGER para que sea flojo en el tiempo de ejecución

Si tuviera el objeto Query de hibernación, podría hacer que creara un objeto de criterio y, usando esto, establecería que el tipo de búsqueda sea vago. Pero tengo que usar el objeto Consulta de JPA. ¿Hay alguna solución para este problema?

+0

Sí, puede - http://stackoverflow.com/questions/4388486/fetchmode-in-jpa-2-criteriaquery –

+0

Ver esto: http: //stackoverflow.com/questions/17847289/ignore-a-fetchtype-eager-in-a-relationship. – Dherik

Respuesta

4

No hay forma de hacerlo, incluso con la API Hibernate nativa. Si una asociación se define como EAGER, siempre estará cargada con entusiasmo, y no hay forma de cambiarla con una consulta.

Lo contrario no es cierto: puede cargar ansiosamente una asociación perezosa mediante una consulta.

+0

Maldita sea. Gracias, sí, he estado usando la palabra clave fetch en HQL para hacer eso. – hugelgupf

-1

Consulte los perfiles de Hibernate Fetch, o los gráficos de entidades JPA. Este problema ha sido resuelto desde que hizo la pregunta en 2012.

+0

Esto no ha sido resuelto ver: https://hibernate.atlassian.net/browse/HHH-8776 - no es posible ignorar la carga EAGER incluso usando EntityGraphs. –

+0

Ahh mis disculpas, haga caso omiso de mi respuesta. El caso de uso típico es el inverso: marque sus entidades como extraídas de forma perezosa, y use el gráfico de entidades para cambiar el tipo de búsqueda para estar ansioso en el tiempo de ejecución. No estaba al tanto de HHH-8776, es bueno saberlo, gracias. – mancini0

Cuestiones relacionadas