From: <one...@us...> - 2003-02-09 06:28:18
|
Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/impl In directory sc8-pr-cvs1:/tmp/cvs-serv20713/hibernate/impl Modified Files: SessionFactoryImpl.java SessionImpl.java Log Message: standardised on dom4j fixed bugs in collection caching (sometimes an exception occurred) allowed null discriminators set autocommit to true in SchemaUpdate collections now deserialize correctly Index: SessionFactoryImpl.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/impl/SessionFactoryImpl.java,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** SessionFactoryImpl.java 3 Feb 2003 12:11:36 -0000 1.8 --- SessionFactoryImpl.java 9 Feb 2003 06:28:15 -0000 1.9 *************** *** 41,45 **** import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cache.Timestamper; ! import net.sf.hibernate.cfg.*; import net.sf.hibernate.collection.CollectionPersister; import net.sf.hibernate.connection.ConnectionProvider; --- 41,46 ---- import net.sf.hibernate.SessionFactory; import net.sf.hibernate.cache.Timestamper; ! import net.sf.hibernate.cfg.Configuration; ! import net.sf.hibernate.cfg.Environment; import net.sf.hibernate.collection.CollectionPersister; import net.sf.hibernate.connection.ConnectionProvider; *************** *** 77,81 **** * Concrete implementation of a SessionFactory * ! * IMMUTABLE */ --- 78,82 ---- * Concrete implementation of a SessionFactory * ! * IMMUTABLE (except for caches) */ *************** *** 452,456 **** } ! Object readResolve() throws ObjectStreamException { log.trace("Resolving serialized SessionFactory"); // look for the instance by uuid --- 453,457 ---- } ! private Object readResolve() throws ObjectStreamException { log.trace("Resolving serialized SessionFactory"); // look for the instance by uuid Index: SessionImpl.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/impl/SessionImpl.java,v retrieving revision 1.17 retrieving revision 1.18 diff -C2 -d -r1.17 -r1.18 *** SessionImpl.java 3 Feb 2003 10:28:47 -0000 1.17 --- SessionImpl.java 9 Feb 2003 06:28:15 -0000 1.18 *************** *** 136,140 **** } ! Object readResolve() throws ObjectStreamException { if ( name.equals(LOADED.name) ) return LOADED; if ( name.equals(DELETED.name) ) return DELETED; --- 136,140 ---- } ! private Object readResolve() throws ObjectStreamException { if ( name.equals(LOADED.name) ) return LOADED; if ( name.equals(DELETED.name) ) return DELETED; *************** *** 164,168 **** LockMode lockMode; ! LockMode nextLockMode; Status status; Serializable id; --- 164,168 ---- LockMode lockMode; ! transient LockMode nextLockMode; Status status; Serializable id; *************** *** 171,176 **** boolean existsInDatabase; Object lastVersion; ! Object nextVersion; ! ClassPersister persister; // for convenience to save some lookups EntityEntry(Status status, Object[] loadedState, Serializable id, Object version, LockMode lockMode, boolean existsInDatabase, ClassPersister persister) { --- 171,177 ---- boolean existsInDatabase; Object lastVersion; ! transient Object nextVersion; ! transient ClassPersister persister; // for convenience to save some lookups ! String className; EntityEntry(Status status, Object[] loadedState, Serializable id, Object version, LockMode lockMode, boolean existsInDatabase, ClassPersister persister) { *************** *** 182,185 **** --- 183,187 ---- this.lockMode = lockMode; this.persister = persister; + if (persister!=null) className = persister.getClassName(); } // called after a *successful* flush *************** *** 214,221 **** boolean initialized; transient CollectionPersister currentPersister; ! CollectionPersister loadedPersister; transient Serializable currentKey; Serializable loadedKey; Serializable snapshot; // session-start/post-flush persistent state CollectionEntry() { this.dirty = false; --- 216,224 ---- boolean initialized; transient CollectionPersister currentPersister; ! transient CollectionPersister loadedPersister; transient Serializable currentKey; Serializable loadedKey; Serializable snapshot; // session-start/post-flush persistent state + private String role; CollectionEntry() { this.dirty = false; *************** *** 226,236 **** this.initialized = initialized; this.loadedKey = loadedID; ! this.loadedPersister = loadedPersister; } CollectionEntry(CollectionSnapshot cs, SessionFactoryImplementor factory) throws MappingException { this.dirty = cs.getDirty(); this.snapshot = cs.getSnapshot(); ! this.loadedKey = cs.getLoadedKey(); ! this.loadedPersister = factory.getCollectionPersister( cs.getLoadedPersisterRole() ); this.initialized = true; } --- 229,241 ---- this.initialized = initialized; this.loadedKey = loadedID; ! setLoadedPersister(loadedPersister); } CollectionEntry(CollectionSnapshot cs, SessionFactoryImplementor factory) throws MappingException { this.dirty = cs.getDirty(); this.snapshot = cs.getSnapshot(); ! this.loadedKey = cs.getKey(); ! setLoadedPersister( ! factory.getCollectionPersister( cs.getRole() ) ! ); this.initialized = true; } *************** *** 270,274 **** if (!processed) throw new AssertionFailure("Hibernate has a bug processing collections"); loadedKey = currentKey; ! loadedPersister = currentPersister; dirty = false; if ( initialized && ( doremove || dorecreate || doupdate ) ) { --- 275,279 ---- if (!processed) throw new AssertionFailure("Hibernate has a bug processing collections"); loadedKey = currentKey; ! setLoadedPersister(currentPersister); dirty = false; if ( initialized && ( doremove || dorecreate || doupdate ) ) { *************** *** 279,287 **** return dirty; } ! public Serializable getLoadedKey() { return loadedKey; } ! public String getLoadedPersisterRole() { ! return loadedPersister.getRole(); } public Serializable getSnapshot() { --- 284,292 ---- return dirty; } ! public Serializable getKey() { return loadedKey; } ! public String getRole() { ! return role; } public Serializable getSnapshot() { *************** *** 291,295 **** dirty = true; } ! } --- 296,303 ---- dirty = true; } ! private void setLoadedPersister(CollectionPersister persister) { ! loadedPersister=persister; ! if (persister!=null) role=persister.getRole(); ! } } *************** *** 306,313 **** // different things. ! Iterator iter = collections.entrySet().iterator(); //TODO:fix this when we have Identity sets while ( iter.hasNext() ) { try { ! ( (PersistentCollection) ( (Map.Entry) iter.next() ).getKey() ).setSession(this); } catch (HibernateException he) { --- 314,326 ---- // different things. ! Iterator iter = collections.entrySet().iterator(); while ( iter.hasNext() ) { try { ! Map.Entry e = (Map.Entry) iter.next(); ! ( (PersistentCollection) e.getKey() ).setSession(this); ! CollectionEntry ce = (CollectionEntry) e.getValue(); ! ce.setLoadedPersister( ! factory.getCollectionPersister( ce.getRole() ) ! ); } catch (HibernateException he) { *************** *** 325,328 **** --- 338,352 ---- } } + + iter = entries.entrySet().iterator(); + while ( iter.hasNext() ) { + EntityEntry e = (EntityEntry) ( (Map.Entry) iter.next() ).getValue(); + try { + e.persister = factory.getPersister(e.className); + } + catch (MappingException me) { + throw new InvalidObjectException( me.getMessage() ); + } + } } *************** *** 956,960 **** if ( coll.wasInitialized() ) { CollectionSnapshot cs = coll.getCollectionSnapshot(); ! if (cs!=null && cs.getLoadedPersisterRole().equals( persister.getRole() ) && cs.getLoadedKey().equals(id) ) { if ( coll.setSession(this) ) addInitializedCollection(coll, cs); } --- 980,984 ---- if ( coll.wasInitialized() ) { CollectionSnapshot cs = coll.getCollectionSnapshot(); ! if (cs!=null && cs.getRole().equals( persister.getRole() ) && cs.getKey().equals(id) ) { if ( coll.setSession(this) ) addInitializedCollection(coll, cs); } |