Cómo anular FetchType.EAGER para que sea perezoso en tiempo de ejecución

Usando JPA EntityManager y el objeto JPA Query, ¿cómo puedo anular algo que tiene la anotación @OneToMany(fetch = FetchType.EAGER) para que se obtenga de forma perezosa en una consulta?

Si tuviera el objeto de consulta de hibernación, podría hacer que creara un objeto de criterios y, al usarlo, configurar el tipo de búsqueda para que sea perezoso. Pero tengo que usar el objeto JPA Query. ¿Hay alguna solución para este problema?

preguntado el 12 de junio de 12 a las 14:06

2 Respuestas

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

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

Respondido el 12 de junio de 12 a las 14:06

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

Mire los perfiles de recuperación de Hibernate o los gráficos de entidades JPA. Este problema se ha resuelto desde que hizo la pregunta en 2012.

Respondido el 26 de Septiembre de 17 a las 16:09

Esto no se ha solucionado ver: hibernate.atlassian.net/browse/HHH-8776 - no es posible ignorar la carga EAGER incluso usando EntityGraphs. - roberto caza

Ahh mis disculpas, ignoren mi respuesta. El caso de uso típico es el inverso: marque sus entidades como recuperadas de forma perezosa y use el gráfico de entidades para cambiar el tipo de recuperación para que esté ansioso en el tiempo de ejecución. No estaba al tanto de HHH-8776, es bueno saberlo, gracias. - mancini0

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.