From: <one...@us...> - 2003-01-30 13:02:33
|
Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/collection In directory sc8-pr-cvs1:/tmp/cvs-serv19702/sf/hibernate/collection Modified Files: CollectionPersister.java PersistentCollection.java Log Message: more efficient collection update()s (keep a snapshot) fixed a problem where null values in one-to-many lists and maps caused an exception Index: CollectionPersister.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/collection/CollectionPersister.java,v retrieving revision 1.7 retrieving revision 1.8 diff -C2 -d -r1.7 -r1.8 *** CollectionPersister.java 27 Jan 2003 07:12:03 -0000 1.7 --- CollectionPersister.java 30 Jan 2003 13:02:29 -0000 1.8 *************** *** 592,596 **** while ( entries.hasNext() ) { Object entry = entries.next(); ! if ( entry!=null || collection.needsUpdating(entry, i, elementType) ) { if (insst==null) insst = session.getBatcher().prepareBatchStatement( getSQLInsertRowString() ); writeKey(insst, id, false, session); --- 592,596 ---- while ( entries.hasNext() ) { Object entry = entries.next(); ! if ( entry!=null && collection.needsUpdating(entry, i, elementType) ) { if (insst==null) insst = session.getBatcher().prepareBatchStatement( getSQLInsertRowString() ); writeKey(insst, id, false, session); Index: PersistentCollection.java =================================================================== RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/collection/PersistentCollection.java,v retrieving revision 1.5 retrieving revision 1.6 diff -C2 -d -r1.5 -r1.6 *** PersistentCollection.java 28 Jan 2003 10:22:19 -0000 1.5 --- PersistentCollection.java 30 Jan 2003 13:02:30 -0000 1.6 *************** *** 15,18 **** --- 15,19 ---- import net.sf.hibernate.HibernateException; import net.sf.hibernate.LazyInitializationException; + import net.sf.hibernate.engine.CollectionSnapshot; import net.sf.hibernate.engine.SessionImplementor; import net.sf.hibernate.type.Type; *************** *** 43,49 **** public abstract class PersistentCollection implements Serializable { protected transient SessionImplementor session; protected boolean initialized; ! private transient List additions; //Careful: these methods do not initialize the collection. --- 44,52 ---- public abstract class PersistentCollection implements Serializable { + protected transient SessionImplementor session; protected boolean initialized; ! private transient List additions; ! private CollectionSnapshot collectionSnapshot; //Careful: these methods do not initialize the collection. *************** *** 59,63 **** protected final void write() { initialize(true); ! if ( session!=null && session.isOpen() ) session.dirty(this); } --- 62,71 ---- protected final void write() { initialize(true); ! if ( session!=null && session.isOpen() ) { ! session.dirty(this); ! } ! else { ! collectionSnapshot.setDirty(); ! } } *************** *** 514,517 **** --- 522,541 ---- public PersistentCollection() {} + /** + * Returns the collectionSnapshot. + * @return CollectionSnapshot + */ + public CollectionSnapshot getCollectionSnapshot() { + return collectionSnapshot; + } + + /** + * Sets the collectionSnapshot. + * @param collectionSnapshot The collectionSnapshot to set + */ + public void setCollectionSnapshot(CollectionSnapshot collectionSnapshot) { + this.collectionSnapshot = collectionSnapshot; + } + } |