Reputation: 3488
I'm running a grails app that doesn't support the hibernate fetch mode subselect. Each item in a collection is fetched with a separate select statement.
I found this stackoverflow suggestion Hibernate: best practice to pull all lazy collections
entity.collection.size()// call size to force hibernate to load the full collection
But this causes a separate select for each item in the collection.
So, I found a utility class on github written to be a stand-in for grails specifically https://gist.github.com/mirasrael/2fb953ee95b0c9d16880e4cfb2477e76
I got it running for my version of Hibernate, but the key lines....
CollectionLoader loader = new OneToManyLoader(collectionPersister, entityIds.length, sf, LoadQueryInfluencers.NONE) :
loader.loadCollectionBatch(session, entityIds, collectionPersister.getKeyType());
...cause Hibernate to run a separate select query for each item in the collection still, which isn't the expected behavior.
I started reading through available Hibernate source code, but I don't know where to start in attempting to polyfill this missing feature.
Upvotes: 0
Views: 171
Reputation: 96
Try this,
@OneToMany(fetch = FetchType.EAGER)
@Fetch(value = FetchMode.SELECT)
@BatchSize(size = 10)
private Set<Child> child= new HashSet<Child>();
It will execute only two queries one for parent and one for child collection.Depending on size value it will load collection.
Upvotes: 1