Я запускаю приложение grails, которое не поддерживает подвыбор режима гибернации. Каждый элемент в коллекции выбирается с отдельным оператором выбора.
Я нашел это предложение по переполнению стека Hibernate: лучшая практика для извлечения всех ленивых коллекций
entity.collection.size()// call size to force hibernate to load the full collection
Но это вызывает отдельный выбор для каждого элемента в коллекции.
Итак, я обнаружил, что служебный класс на github написан специально для grails.
https://gist.github.com/mirasrael/2fb953ee95b0c9d16880e4cfb2477e76
Я запустил его для моей версии Hibernate, но ключевые моменты ....
CollectionLoader loader = new OneToManyLoader(collectionPersister, entityIds.length, sf, LoadQueryInfluencers.NONE) :
loader.loadCollectionBatch(session, entityIds, collectionPersister.getKeyType());
... заставляет Hibernate запускать отдельный запрос выбора для каждого элемента в коллекции, что не является ожидаемым поведением.
Я начал читать доступный исходный код Hibernate, но я не знаю, с чего начать при попытке заполнить эту недостающую функцию.