[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