Es posible reemplazar LAZY en HQL utilizando LEFT JOIN FETCH.

FROM Obj AS obj LEFT JOIN FETCH obj.otherObj WHERE obj.id = :id

También es posible reemplazar EAGER? Cómo?

OriginalEl autor Ondra Žižka | 2010-06-18

2 Comentarios

  1. 4

    El calificador en este fragmento de la Hibernate Docs implica que puede reemplazar perezoso con muchas ganas, pero no al revés:

    Si usted está utilizando el nivel de propiedades perezoso
    buscar (con código de bytes
    instrumentación), es posible
    la fuerza de Hibernación para ir a buscar el perezoso
    propiedades en la primera consulta
    inmediatamente, a través de recuperar todas las
    propiedades.

    Inusualmente, parece que si utiliza la API de Criterios para ir de ganas de perezoso. Simplemente llame a setFetchMode(FetchMode.LAZY) en la combinación.

    Parece setFetchMode(FetchMode.PEREZOSO) todavía se termina yendo a buscar algo con impaciencia (es decir, que no se obtienen por un deseosos de unirse, pero por n+1 selecciona después de la primera consulta sql). No parece ser una manera de reemplazar completamente las GANAS de configuración.
    Estoy teniendo la misma experiencia. El JavaDoc para esta anotación parece estar en conflicto (opensource.atlassian.com/projects/hibernate/browse/HHH-980), pero si el uso de SELECCIONAR o PEREZOSO que los niños son todavía muchas GANAS de devolver. No estoy seguro si estoy haciendo algo mal, o si hay una Hibernación error.
    FetchMode.LAZY también es obsoleto
    No funciona, obtener todavía con ganas.

    OriginalEl autor sblundy

  2. 6

    Tuve una situación que, por razones históricas hicieron con ganas de buscar entre varias de uno-a-muchos dependencias. A través de los años muchos lugares llegó a depender de ella así que era difícil de apagar. Sin embargo, para algunos casos, las ganas de recuperar obstaculizaba: para cada selección más grande sobre la mesa, que saldría 100s de los pequeños subconsultas para cada una de las colecciones de cada uno de los objetos. He encontrado una manera de conseguir alrededor de esto, realmente no reemplazar las ganas de buscar, pero para mí igual de útil: cree una consulta que hace todo el subfetches a la vez. Esto hará 1 física de la consulta a la base de datos, en lugar de tener hibernate pie el gráfico de dependencia y spawn 100s de consultas.

    Así que sustituye

    Query q = session.createQuery("from Customer c");

    por

    Query q = session.createQuery("from Customer c " +
                                  "left join fetch c.vats v " +
                                  "left join fetch v.klMemos bk " +
                                  "left join fetch bk.ferryKlMemos");

    1 Cliente tiene muchos números de IVA, 1 número de IVA tiene muchos klmemos y así sucesivamente. La situación anterior, en primer recuperar sólo los clientes y de hibernación, empezaría a buscar cada uno de los dependientes de las colecciones de uno por uno. El segundo formulario se carga todo en uno nativo de consulta, y de hibernación, encontrará todo lo que necesita para rellenar las ganas de colecciones en la memoria caché de objetos.

    Nota este enfoque también simula rápido con ganas de captura para las colecciones que están configurados para ser perezoso, como estás rellenar todos los «perezosos» colecciones en una ansiosa (y eficiente).

    OriginalEl autor geert3

Dejar respuesta

Please enter your comment!
Please enter your name here