lotes con java
Usando la recuperación por lotes Hibernate puede cargar varios proxies sin inicializar si se accede a un proxy. La recuperación en lotes es una optimización de la táctica de recuperación por selección perezosa. Hay dos maneras en que puede configurar la recuperación en lotes a nivel de la clase y a nivel de colección.

La recuperación en lotes para clases/entidades es más fácil de comprender. Considere el próximo ejemplo en tiempo de ejecución tiene 25 instancias de Cat cargadas en una Session y cada Cat tiene una referencia a su owner una Person. La clase Person está mapeada con un proxy lazy=true. Si ahora itera a través de todos los cats y llama a getOwner() para cada uno Hibernate por defecto ejecutará 25 declaraciones SELECT para recuperar los dueños proxies. Puede afinar este comportamiento especificando un batch-size en el mapeo de Person


class name=Person batch-size=10
...class

Hibernate ahora ejecutará sólamente tres consultas el patrón es 10 10 5.

También puede habilitar la recuperación en lotes para colecciones. Por ejemplo si cada Person tiene una colección perezosa de Cats y hay 10 personas actualmente cargadas en la Session iterar a través de las 10 personas generará 10 SELECTs uno para cada llamada a getCats(). Si habilita la recuperación en lotes para la colección de cats en el mapeo de Person Hibernate puede recuperar por adelantado las colecciones


class name=Person
set name=cats batch-size=3
...
set
class

Con un batch-size de 3 Hibernate cargará las colecciones 3 3 3 1 en cuatro SELECTs. Una vez más el valor del atributo depende del número esperado de colecciones sin inicializar en una Session en propia.

La recuperación de colecciones en lotes es particularmente útil si tiene un árbol anidado de ítems por ejemplo el típico patrón de cuenta de materiales. Sin embargo un conjunto anidado o una ruta materializada podría ser una mejor opción para árboles que sean de lectura en la mayoría de los casos.