Por ejemplo:
from Cat as cat inner join cat.mate as mate left outer join cat.kittens as kitten
from Cat as cat left join cat.mate.kittens as kittens
from Formula form full join form.parameter param
from Cat as cat join cat.mate as mate left join cat.kittens as kitten
from Cat as cat left join cat.kittens as kitten with kitten.bodyWeight > 10.0
A "fetch" join allows associations or collections of values to be initialized along with their parent objects using a single select. This is particularly useful in the case of a collection. It effectively overrides the outer join and lazy declarations of the mapping file for associations and collections. See Sección 20.1, “Estrategias de recuperación” for more information.
from Cat as cat inner join fetch cat.mate left join fetch cat.kittens
Usualmente no se necesita asignársele un alias a una unión de recuperación ya que los objetos asociados no se deben utilizar en la cláusula
where
(ni en cualquier otra cláusula). Los objetos asociados no se retornan directamente en los resultados de la consulta. En cambio, se pueden acceder por medio del objeto padre. La única razón por la que necesitaríamos un alias es si estamos uniendo recursivamente otra colección:from Cat as cat inner join fetch cat.mate left join fetch cat.kittens child left join fetch child.kittens
La construcción
fetch
no puede utilizarse en consultas llamadas que usen iterate()
(aunque se puede utilizar scroll()
). Fetch
se debe usar junto con setMaxResults()
o setFirstResult()
ya que estas operaciones se basan en las filas de resultados, las cuales usualmente contienen duplicados para la recuperación de colección temprana, por lo tanto, el número de filas no es lo que se esperaría. Fetch
no se debe usar junto con una condición with
improvisadas. Es posible crear un producto cartesiano por medio de una recuperación por union más de una colección en una consulta, así que tenga cuidado en este caso. La recuperación por unión de múltiples roles de colección también da resultados a veces inesperados para mapeos de bag, así que tenga cuidado de cómo formular sus consultas en este caso. Finalmente, observe que full join fetch
y right join fetch
no son significativos.
Si está utilizando una recuperación perezosa a nivel de propiedad (con instrumentación de código byte), es posible forzar a Hibernate a traer las propiedades perezosas inmediatamente utilizando
fetch all properties
.from Document fetch all properties order by name
from Document doc fetch all properties where lower(doc.name) like '%cats%'
No hay comentarios.:
Publicar un comentario