diff --git a/src/org/hibernate/impl/SessionFactoryImpl.java b/src/org/hibernate/impl/SessionFactoryImpl.java index b7f20b09ae..35cefef251 100644 --- a/src/org/hibernate/impl/SessionFactoryImpl.java +++ b/src/org/hibernate/impl/SessionFactoryImpl.java @@ -391,6 +391,9 @@ public void handleEntityNotFound(String entityName, Serializable id) { } private void registerEntityNameResolvers(EntityPersister persister) { + if ( persister.getEntityMetamodel() == null || persister.getEntityMetamodel().getTuplizerMapping() == null ) { + return; + } Iterator itr = persister.getEntityMetamodel().getTuplizerMapping().iterateTuplizers(); while ( itr.hasNext() ) { final EntityTuplizer tuplizer = ( EntityTuplizer ) itr.next(); diff --git a/src/org/hibernate/impl/SessionImpl.java b/src/org/hibernate/impl/SessionImpl.java index d7952521c3..ab3f88921a 100644 --- a/src/org/hibernate/impl/SessionImpl.java +++ b/src/org/hibernate/impl/SessionImpl.java @@ -17,7 +17,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.dom4j.Element; import org.hibernate.CacheMode; import org.hibernate.ConnectionReleaseMode; import org.hibernate.Criteria; @@ -98,7 +97,6 @@ import org.hibernate.proxy.LazyInitializer; import org.hibernate.stat.SessionStatistics; import org.hibernate.stat.SessionStatisticsImpl; -import org.hibernate.tuple.DynamicMapInstantiator; import org.hibernate.type.Type; import org.hibernate.util.ArrayHelper; import org.hibernate.util.CollectionHelper; @@ -149,29 +147,7 @@ public final class SessionImpl extends AbstractSessionImpl private transient Session rootSession; private transient Map childSessionsByEntityMode; - private EntityNameResolver entityNameResolver = new EntityNameResolver() { - public String resolveEntityName(Object entity) { - String entityName = interceptor.getEntityName( entity ); - if ( entityName != null ) { - return entityName; - } - - Iterator itr = factory.iterateEntityNameResolvers( entityMode ); - while ( itr.hasNext() ) { - final EntityNameResolver resolver = ( EntityNameResolver ) itr.next(); - entityName = resolver.resolveEntityName( entity ); - if ( entityName != null ) { - break; - } - } - if ( entityName != null ) { - return entityName; - } - - // the old-time stand-by... - return entity.getClass().getName(); - } - }; + private EntityNameResolver entityNameResolver = new CoordinatingEntityNameResolver(); /** * Constructor used in building "child sessions". @@ -1887,6 +1863,8 @@ private void checkTransactionSynchStatus() { private void readObject(ObjectInputStream ois) throws IOException, ClassNotFoundException { log.trace( "deserializing session" ); + entityNameResolver = new CoordinatingEntityNameResolver(); + boolean isRootSession = ois.readBoolean(); connectionReleaseMode = ConnectionReleaseMode.parse( ( String ) ois.readObject() ); entityMode = EntityMode.parse( ( String ) ois.readObject() ); @@ -1964,4 +1942,28 @@ private void writeObject(ObjectOutputStream oos) throws IOException { oos.writeObject( enabledFilters ); oos.writeObject( childSessionsByEntityMode ); } + + private class CoordinatingEntityNameResolver implements EntityNameResolver { + public String resolveEntityName(Object entity) { + String entityName = interceptor.getEntityName( entity ); + if ( entityName != null ) { + return entityName; + } + + Iterator itr = factory.iterateEntityNameResolvers( entityMode ); + while ( itr.hasNext() ) { + final EntityNameResolver resolver = ( EntityNameResolver ) itr.next(); + entityName = resolver.resolveEntityName( entity ); + if ( entityName != null ) { + break; + } + } + if ( entityName != null ) { + return entityName; + } + + // the old-time stand-by... + return entity.getClass().getName(); + } + } }