From: <one...@us...> - 2003-01-15 12:49:04
|
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--; ! } } } |