[hibernate-commits] Hibernate SVN: r20210 - in core/trunk: testsuite/src/test/java/org/hibernate/test/cascade and 1 other directory.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Fri Aug 20 13:18:45 EDT 2010


Author: gbadner
Date: 2010-08-20 13:18:44 -0400 (Fri, 20 Aug 2010)
New Revision: 20210

Modified:
   core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java
   core/trunk/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java
Log:
HHH-3334 : Cascade-save breaks if parent ID is assigned (delays insert) and child has identity ID (early insert) (Wallace Wadge)

Modified: core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java
===================================================================
--- core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java	2010-08-20 13:34:56 UTC (rev 20209)
+++ core/trunk/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java	2010-08-20 17:18:44 UTC (rev 20210)
@@ -262,11 +262,6 @@
 		boolean inTxn = source.getJDBCContext().isTransactionInProgress();
 		boolean shouldDelayIdentityInserts = !inTxn && !requiresImmediateIdAccess;
 
-		if ( useIdentityColumn && !shouldDelayIdentityInserts ) {
-			log.trace( "executing insertions" );
-			source.getActionQueue().executeInserts();
-		}
-
 		// Put a placeholder in entries, so we don't recurse back and try to save() the
 		// same object again. QUESTION: should this be done before onSave() is called?
 		// likewise, should it be done before onUpdate()?
@@ -286,6 +281,11 @@
 
 		cascadeBeforeSave( source, persister, entity, anything );
 
+		if ( useIdentityColumn && !shouldDelayIdentityInserts ) {
+			log.trace( "executing insertions" );
+			source.getActionQueue().executeInserts();
+		}		
+
 		Object[] values = persister.getPropertyValuesToInsert( entity, getMergeMap( anything ), source );
 		Type[] types = persister.getPropertyTypes();
 

Modified: core/trunk/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java
===================================================================
--- core/trunk/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java	2010-08-20 13:34:56 UTC (rev 20209)
+++ core/trunk/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java	2010-08-20 17:18:44 UTC (rev 20210)
@@ -59,44 +59,7 @@
 		return new FunctionalTestClassTestSuite( CascadeTestWithAssignedParentIdTest.class );
 	}
 
-
-	/**
-	 * Saves the child object with the parent when both the one-to-many and
-	 * many-to-one associations use cascade="all"
-	 */
-	public void testSaveChildWithParentFailureExpected() {
-		if ( ! IdentityGenerator.class.isAssignableFrom( getDialect().getNativeIdentifierGeneratorClass() ) ) {
-			reportSkip( "FailureExpected test passes when native id generator is not IdentityGenerator",
-					"parent insert is assigned (delayed) when child is identity (early insert)" );
-			fail( "test is expected to fail" );
-			return;
-		}
-		Session session = openSession();
-		Transaction txn = session.beginTransaction();
-		Parent parent = new Parent();
-		Child child = new Child();
-		child.setParent( parent );
-		parent.setChildren( Collections.singleton( child ) );
-		parent.setId(new Long(123L));
-		// this should figure out that the parent needs saving first since id is assigned.
-		session.save( child );
-		txn.commit();
-		session.close();
-
-		session = openSession();
-		txn = session.beginTransaction();
-		parent = ( Parent ) session.get( Parent.class, parent.getId() );
-		assertEquals( 1, parent.getChildren().size() );
-		txn.commit();
-		session.close();
-	}
-
 	public void testSaveChildWithParent() {
-		if ( IdentityGenerator.class.isAssignableFrom( getDialect().getNativeIdentifierGeneratorClass() ) ) {
-			reportSkip( "test is known to fail when native id generator is IdentityGenerator",
-					"parent insert is assigned (delayed) when child has identity (early insert)" );
-			return;
-		}
 		Session session = openSession();
 		Transaction txn = session.beginTransaction();
 		Parent parent = new Parent();



More information about the hibernate-commits mailing list