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;
+ }
+
}
|