2010-02-08 8 views
18

Estoy escribiendo una consulta en un modelo de dominio donde (por alguna razón) se mapea una asociación de uno a muchos con lazy = "false". En mi consulta particular, prefiero ir a buscar esa colección perezosamente, porque no me importa su contenido. ¿Cómo puedo volver a habilitar la pereza para mi consulta en particular? ¿Es esto posible?Hibernate: Habilitar la recuperación diferida en la API de Criterios

Hasta el momento, miré a Criteria.setFetchMode, pero FetchMode.LAZY es simplemente un alias en desuso para FetchMode.SELECT ...

Cambio de la asignación, probablemente sería lo ideal, pero preferiría no hacerlo riesgo que afectan a las consultas existentes.

Editar: Utilizamos Hibernate 3.3.2

Respuesta

-6

no soy un experto mí mismo, pero la navegación a través del libro de hibernación y consultar con un colega no me dio ningún indicio de que esto sería posible, más bien al contrario .

La tuya parece ser una situación inusual, no cubierta por Hibernate. El caso de uso típico es el opuesto: utilizar la recuperación diferida de manera predeterminada y activar de forma selectiva la búsqueda con ganas para las consultas donde esté justificado.

+0

no he encontrado nada. Parece que uno mejor no se desvía de los valores predeterminados de hibernate. He solucionado el problema mediante la proyección. (No necesitaba todas las entidades, aunque preferiría haber evitado definir un nuevo DTO). – meriton

+3

ver mi respuesta, setFetchMode funcionó. –

4

En caso de que alguien tropiece con esto (como yo), consulte this. Parece que se trata de un error de documentación de Hibernate, y FetchMode.SELECT causa una carga lenta.

25

La respuesta aceptada es incorrecta. Hibernate le permite acceder a los criterios de forma perezosa, algo que está ansioso por defecto en la asignación. Simplemente llame al

criteria.setFetchMode("propertyName", FetchMode.SELECT); 

He intentado esto y funcionó. FetchMode.LAZY está marcado obsoleto en el código fuente, y lo único que hace es apuntar a FetchMode.SELECT

código

Hibernate:

public static final FetchMode LAZY = SELECT; 
+1

Esto funcionó para mí: estaba usando Criteria.DISTINCT_ROOT_ENTITY con setFirstResult & setMaxResults y obtenía muy pocos resultados. – blank

+2

@Che javara - Acabo de probar esto y no funciona para mí. Estoy usando Hibernate 3.6.10. Se buscó el código para usos y ninguno parecía ser casos de Hibernate omitiendo la carga de una colección/asociación. ¿Tienes alguna sugerencia sobre dónde buscar? – mikemil

+0

No funcionó para mí con hibernate 4.0.5 – nxhoaf

Cuestiones relacionadas