|
From: <hib...@li...> - 2006-08-04 20:29:48
|
Author: ste...@jb...
Date: 2006-08-04 16:29:45 -0400 (Fri, 04 Aug 2006)
New Revision: 10224
Modified:
trunk/Hibernate3/src/org/hibernate/event/def/DefaultEvictEventListener.java
Log:
HHH-1954 : proxies and eviction
Modified: trunk/Hibernate3/src/org/hibernate/event/def/DefaultEvictEventListener.java
===================================================================
--- trunk/Hibernate3/src/org/hibernate/event/def/DefaultEvictEventListener.java 2006-08-04 20:29:21 UTC (rev 10223)
+++ trunk/Hibernate3/src/org/hibernate/event/def/DefaultEvictEventListener.java 2006-08-04 20:29:45 UTC (rev 10224)
@@ -40,38 +40,35 @@
public void onEvict(EvictEvent event) throws HibernateException {
EventSource source = event.getSession();
final Object object = event.getObject();
-
final PersistenceContext persistenceContext = source.getPersistenceContext();
+
if ( object instanceof HibernateProxy ) {
-
LazyInitializer li = ( (HibernateProxy) object ).getHibernateLazyInitializer();
Serializable id = li.getIdentifier();
EntityPersister persister = source.getFactory().getEntityPersister( li.getEntityName() );
- if (id==null) {
+ if ( id == null ) {
throw new IllegalArgumentException("null identifier");
}
-
+
EntityKey key = new EntityKey( id, persister, source.getEntityMode() );
- persistenceContext.removeProxy(key);
-
+ persistenceContext.removeProxy( key );
+
if ( !li.isUninitialized() ) {
- final Object entity = persistenceContext.removeEntity(key);
+ final Object entity = persistenceContext.removeEntity( key );
if ( entity != null ) {
- EntityEntry e = event.getSession().getPersistenceContext().removeEntry(entity);
+ EntityEntry e = event.getSession().getPersistenceContext().removeEntry( entity );
doEvict( entity, key, e.getPersister(), event.getSession() );
}
}
-
+ li.setSession( null );
}
else {
-
- EntityEntry e = persistenceContext.removeEntry(object);
+ EntityEntry e = persistenceContext.removeEntry( object );
if ( e != null ) {
EntityKey key = new EntityKey( e.getId(), e.getPersister(), source.getEntityMode() );
- persistenceContext.removeEntity(key);
+ persistenceContext.removeEntity( key );
doEvict( object, key, e.getPersister(), source );
}
-
}
}
@@ -87,15 +84,17 @@
}
// remove all collections for the entity from the session-level cache
- if ( persister.hasCollections() ) new EvictVisitor( session ).process( object, persister );
-
+ if ( persister.hasCollections() ) {
+ new EvictVisitor( session ).process( object, persister );
+ }
+
// remove any snapshot, not really for memory management purposes, but
// rather because it might now be stale, and there is no longer any
// EntityEntry to take precedence
// This is now handled by removeEntity()
//session.getPersistenceContext().removeDatabaseSnapshot(key);
- new Cascade(CascadingAction.EVICT, Cascade.AFTER_EVICT, session)
- .cascade(persister, object);
+ new Cascade( CascadingAction.EVICT, Cascade.AFTER_EVICT, session )
+ .cascade( persister, object );
}
}
|