Hibernate массовое извлечение (batch fetching) формирование запроса
Изучаю Hibernate, читаю "Hibernate in action". В теме "Массовое извлечение" сказано, что можно пометить класс аннотацией @org.hibernate.annotations.BatchSize(size = 10). В таком случае при отложенной инициализации вложенных коллекций, при инициализации прокси объектов в одном запросе может быть инициализировано до 10 объектов.
@Entity
@org.hibernate.annotations.BatchSize(size = 10)
@Table(name = "USERS")
public class USER{
// ...
}
@Entity
@Table(name = "ITEM")
public class Item{
@ManyToOne(fetch = FetchType.lazy)
private User seller;
// ....
}
С данными классами выполняется следующий код
List<Item> items = em.createQuery("select i from Item i").getResultList;
//select * from ITEM
for (Item item : items){
assertNotNull(item.getSeller().getUsername());
//select * from USER where ID in (?,?,?,?,?,?,?,?,?,?)
}
Предполагается, что при обходе массива будут формироваться запросы для поиска сразу по нескольким ID (до 10).
Но не понятно в какой момент этот запрос формируется (заполняется искомыми ID) и в какой выполняется?
На каждом шаге цикла обхода массива мы уже оцениваем данные элемента массива assertNotNull. Т.е. необходимо каждый раз выполнять запрос к БД и тогда концепция массового запроса не работает. А если предположить, что запрос выполняется до оценки элементов, то не понятно в какой момент происходит заполнение его данными о искомых ID.
Соответственно, как происходит заполнение запроса для получения данных при использовании аннотации @org.hibernate.annotations.BatchSize(size = 10)? В какой момент выполняется этот запрос?