[hibernate-dev] 2nd-level cache suggestions

Max Rydahl Andersen max.andersen at redhat.com
Tue Apr 1 07:13:23 EDT 2008


> I propose the following solutions:
>
> 1. I think it's possible to add a manual collection cache entry update
> in the postAction() callback. And it'll probably work.

How would you ensure that the cache is consistent ?

"extra lazy collections" is kinda opposite to what "cached collections" is about...

I fail to see the problem...

> 2. This one is much harder to fix. I'm planning to add a special flag
> "onlyCached" to the LoadEvent and add the corresponding functionality to
> the DefaultLoadEventListener. So I'll have something like:
> ========
> 	public void initializeFromCache(CollectionPersister persister,
> Serializable disassembled, Object owner)
> 	throws HibernateException {
> 		Serializable[] array = ( Serializable[] ) disassembled;
> 		int size = array.length;
> 		Object [] loaded=new Object[size];
> 		List notInCache=new ArrayList();
>
> 		beforeInitialize( persister, size );
>
> 		for ( int i = 0; i < size; i++ ) {
> 			loaded[i]=session.tryToLoadFromCache(array[i], owner);
> 			if (loaded[i]==null)
> 				notInCache.add(array[i]);
> 		}
>
> 		Iterator entities=getSession().createCriteria(
> 			persister.getElementType().getName())
> 			.add(Restrictions.in("id",notInCache))
> 			.iterate();
> 		for(int i=0; i < size; i++)
> 		{
> 			if (loaded[i]!=null)
> 				list.add(loaded[i]);
> 			else
> 				list.add(entities.next());
> 		}
> 	}
> ========

Bulk loading of non-cached elements could be usefull...

> 3. This is a fairly large task, which requires changing some of
> Hibernate fundamentals (like LoadEvent). But I think I can do it.

Have you looked in Hibernate 3.3 and checked if the recent refactorings
that were done here for the cache api is enough for you ?

/max




More information about the hibernate-dev mailing list