HIbernate OneToManyLoader为集合中的每个项目执行select

HIbernate OneToManyLoader为集合中的每个项目执行select,hibernate,Hibernate,我运行的grails应用程序不支持hibernate fetch mode subselect。集合中的每个项都使用单独的select语句获取 我发现了这个建议 但这会导致对集合中的每个项目进行单独的选择 因此,我在github上发现了一个实用程序类,专门用来替代grails 我让它在我的Hibernate版本中运行,但是关键的一行 CollectionLoader loader = new OneToManyLoader(collectionPersister, entityIds.leng

我运行的grails应用程序不支持hibernate fetch mode subselect。集合中的每个项都使用单独的select语句获取

我发现了这个建议

但这会导致对集合中的每个项目进行单独的选择

因此,我在github上发现了一个实用程序类,专门用来替代grails

我让它在我的Hibernate版本中运行,但是关键的一行

CollectionLoader loader = new OneToManyLoader(collectionPersister, entityIds.length, sf, LoadQueryInfluencers.NONE) :
loader.loadCollectionBatch(session, entityIds, collectionPersister.getKeyType());
…导致Hibernate仍然对集合中的每个项运行一个单独的select查询,这不是预期的行为

我开始阅读可用的Hibernate源代码,但我不知道从哪里开始尝试填充这个缺失的功能。

试试这个

 @OneToMany(fetch = FetchType.EAGER)
 @Fetch(value = FetchMode.SELECT)
 @BatchSize(size = 10)
 private Set<Child> child= new HashSet<Child>();
@OneToMany(fetch=FetchType.EAGER)
@获取(值=获取模式。选择)
@批量大小(大小=10)
private Set child=new HashSet();
它将只执行两个查询,一个查询父集合,一个查询子集合。它将根据大小值加载集合

 @OneToMany(fetch = FetchType.EAGER)
 @Fetch(value = FetchMode.SELECT)
 @BatchSize(size = 10)
 private Set<Child> child= new HashSet<Child>();