[hibernate-issues] [Hibernate-JIRA] Resolved: (HHH-7186) Enabling 2nde level cache with filtered collections.

Steve Ebersole (JIRA) noreply at atlassian.com
Mon Mar 19 14:34:48 EDT 2012


     [ https://hibernate.onjira.com/browse/HHH-7186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

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: http://www.atlassian.com/software/jira

        


More information about the hibernate-issues mailing list