Hibernate Subselect vs Batch Fetching

Hibernate proporciona (al menos) dos opciones para solucionar el problema de consulta N + 1. El primero es configurar FetchMode en Subselect, que genera una selección con una cláusula IN y una subselección dentro de esta cláusula IN. El otro es especificar un BatchSize, que genera una selección con una cláusula IN que contiene los ID de los padres.

Ambos funcionan pero encuentro que la opción Subseleccionar a menudo se encuentra con problemas de rendimiento debido a que la consulta de los padres es compleja. Por otro lado, con un BatchSize grande (digamos 1000), el número de consultas y la complejidad de esas consultas son muy pequeñas.

Mi pregunta es así: ¿cuándo utilizarías Subselect FetchMode de Hibernate sobre BatchSize? La subselección probablemente tenga sentido si tiene una gran cantidad de entradas principales (miles), pero ¿hay otros escenarios en los que preferiría una Subselección a BatchSize?

EDIT: noté una diferencia entre los dos cuando se trata de una carga ansiosa. Si tiene una asociación xToMany configurada para cargarse ansiosamente y a través de una subselección, genera una subselección como si fuera vago. Sin embargo, si especifica un BatchSize, la consulta generada hace uso de una combinación externa en lugar de una consulta separada. ¿Hay alguna forma de obligar a Hibernate a usar una consulta por lotes separada cuando se carga con entusiasmo?

Respuestas a la pregunta(2)

Su respuesta a la pregunta