Update of /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/impl
In directory sc8-pr-cvs1:/tmp/cvs-serv9590/sf/hibernate/impl
Modified Files:
SessionImpl.java
Log Message:
added a new exception to stop a flush occuring during cascade
Index: SessionImpl.java
===================================================================
RCS file: /cvsroot/hibernate/Hibernate2/src/net/sf/hibernate/impl/SessionImpl.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** SessionImpl.java 15 Jan 2003 10:33:17 -0000 1.9
--- SessionImpl.java 15 Jan 2003 12:49:01 -0000 1.10
***************
*** 123,126 ****
--- 123,127 ----
private transient int dontFlushFromFind = 0;
private transient boolean reentrantCallback = false;
+ private transient int cascading = 0;
private transient Batcher batcher;
***************
*** 591,595 ****
// cascade-save to many-to-one BEFORE the parent is saved
! Cascades.cascade(this, persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_BEFORE_INSERT_AFTER_DELETE);
Object[] values = persister.getPropertyValues(object);
--- 592,602 ----
// cascade-save to many-to-one BEFORE the parent is saved
! cascading++;
! try {
! Cascades.cascade(this, persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_BEFORE_INSERT_AFTER_DELETE);
! }
! finally {
! cascading--;
! }
Object[] values = persister.getPropertyValues(object);
***************
*** 631,635 ****
// cascade-save to collections AFTER the collection owner was saved
! Cascades.cascade(this, persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_AFTER_INSERT_BEFORE_DELETE);
return id;
--- 638,648 ----
// cascade-save to collections AFTER the collection owner was saved
! cascading++;
! try {
! Cascades.cascade(this, persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_AFTER_INSERT_BEFORE_DELETE);
! }
! finally {
! cascading--;
! }
return id;
***************
*** 840,843 ****
--- 853,857 ----
nullifiables = oldNullifiables;
+ cascading++;
try {
// cascade-delete to collections "BEFORE" the collection owner is deleted
***************
*** 845,848 ****
--- 859,863 ----
}
finally {
+ cascading--;
newNullifiables.addAll(oldNullifiables);
nullifiables = newNullifiables;
***************
*** 1057,1061 ****
if (proxy!=object) proxiesByKey.put(key, proxy);
! Cascades.cascade(this, persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_ON_UPDATE); // do cascade
}
--- 1072,1082 ----
if (proxy!=object) proxiesByKey.put(key, proxy);
! cascading++;
! try {
! Cascades.cascade(this, persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_ON_UPDATE); // do cascade
! }
! finally {
! cascading--;
! }
}
***************
*** 1683,1686 ****
--- 1704,1710 ----
*/
public void flush() throws HibernateException {
+ if (cascading>0) throw new HibernateException(
+ "Flush during cascade is dangerous - this might occur if an object was deleted and then re-saved by cascade"
+ );
flushEverything();
execute();
***************
*** 1917,1921 ****
if ( status!=LOADING && status!=GONE && status!=DELETED ) {
Object object = me.getKey();
! Cascades.cascade(this, entry.persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_ON_UPDATE);
}
}
--- 1941,1951 ----
if ( status!=LOADING && status!=GONE && status!=DELETED ) {
Object object = me.getKey();
! cascading++;
! try {
! Cascades.cascade(this, entry.persister, object, Cascades.ACTION_SAVE_UPDATE, Cascades.CASCADE_ON_UPDATE);
! }
! finally {
! cascading--;
! }
}
}
|