Por defecto Hibernate3 usa una recuperación perezosa por selección para colecciones y una recuperación por proxy perezosa para asociaciones monovaluadas. Estas políticas predeterminadas tienen sentido para casi todas las asociaciones en la mayoría de las aplicaciones.

Si configura hibernate.default_batch_fetch_size Hibernate utilizará la optimización de recuperación en lotes para recuperación perezosa. Esta optimización también se puede habilitar en un nivel más detallado.

Note que el alcanzar a una asociación perezosa afuera del contexto de una sesión de Hibernate libre resultará en una excepción. Por ejemplo

s = sessions.openSession()
Transaction tx = s.beginTransaction()

User u = (User) s.createQuery(from User u where u.name=userName)
.setString(userName userName).uniqueResult()
Map permissions = u.getPermissions()

tx.commit()
s.close()

Integer accessLevel = (Integer) permissions.get(accounts) // Error!
Ya que la colección de permisos no fue inicializada cuando se cerró la Session la colección no será capaz de cargar su estado. Hibernate no soporta la inicialización perezosa de objetos separados. La solución es mover el código que lee de la colección a justo antes de que se guarde la transacción.

Opcionalmente puede utilizar una colección no perezosa o asociación especificando lazy=false para el mapeo de asociación. Sin embargo el propósito de la inicialización perezosa es que se utilice para casi todas las colecciones y asociaciones. ¡Si determina demasiadas asociaciones no perezosas en su modelo de objetos Hibernate recuperará la fundamento de datos entera en toda transacción.

Por otro lado puede utilizar la recuperación por unión la cual no es perezosa por naturaleza en espacio de la recuperación por selección en una transacción en propia. Veremos ahora cómo personalizar la táctica de recuperación. En Hibernate3 los mecanismos para escoger una táctica de recuperación son idénticas para las de las asociaciones monovaluadas y las colecciones.