]
Steve Ebersole resolved HHH-7186.
---------------------------------
Resolution: Rejected
We believe this is not a good idea, so unfortunately we will not be able to do this.
Enabling 2nde level cache with filtered collections.
----------------------------------------------------
Key: HHH-7186
URL:
https://hibernate.onjira.com/browse/HHH-7186
Project: Hibernate ORM
Issue Type: Improvement
Components: core
Affects Versions: 3.3.1, 4.0.1, 4.1.1
Reporter: Lucas POUZAC
Actually, when we use filtered collection, the 2nde level cache can't be activate.
Below, the code snippet :
{code:title=org.hibernate.engine.loading.internal.CollectionLoadContext.java|borderStyle=solid}
/**
* Add the collection to the second-level cache
*
* @param lce The entry representing the collection to add
* @param persister The persister
*/
private void addCollectionToCache(LoadingCollectionEntry lce, CollectionPersister
persister) {
...
if ( !session.getEnabledFilters().isEmpty() &&
persister.isAffectedByEnabledFilters( session ) ) {
// some filters affecting the collection are enabled on the session, so do not do the
put into the cache.
LOG.debug( "Refusing to add to cache due to enabled filters" );
// todo : add the notion of enabled filters to the CacheKey to differentiate filtered
collections from non-filtered;
// but CacheKey is currently used for both collections and entities; would
ideally need to define two seperate ones;
// currently this works in conjuction with the check on
// DefaultInitializeCollectionEventHandler.initializeCollectionFromCache() (which
makes sure to not read from
// cache with enabled filters).
return; // EARLY EXIT!!!!!
}
...
}
{code}
{code:title=org.hibernate.event.internal.DefaultInitializeCollectionEventListener.java|borderStyle=solid}
/**
* Try to initialize a collection from the cache
*
* @param id The id of the collection of initialize
* @param persister The collection persister
* @param collection The collection to initialize
* @param source The originating session
* @return true if we were able to initialize the collection from the cache;
* false otherwise.
*/
private boolean initializeCollectionFromCache(Serializable id, CollectionPersister
persister, PersistentCollection collection, SessionImplementor source) {
...
if ( !source.getLoadQueryInfluencers().getEnabledFilters().isEmpty() &&
persister.isAffectedByEnabledFilters( source ) ) {
LOG.trace( "Disregarding cached version (if any) of collection due to enabled
filters" );
return false;
}
...
}
{code}
Could you add this feature ?
For example, we should modify the cache key to add the filter name.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: