Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

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

hibernate-commits

2010-08-20


Author LoginPost Reply
Author: gbadner
Date: 2010-08-20 13:23:03 -0400 (Fri, 20 Aug 2010)
New Revision: 20211

Modified:
 core/branches/Branch_3_5/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java
 core/branches/Branch_3_5/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/branches/Branch_3_5/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java  2010-08-20 17:18:44 UTC (rev 20210)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/event/def/AbstractSaveEventListener.java  2010-08-20 17:23:03 UTC (rev 20211)
@@(protected) @@
   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()?
@@(protected) @@

   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/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java  2010-08-20 17:18:44 UTC (rev 20210)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/cascade/CascadeTestWithAssignedParentIdTest.java  2010-08-20 17:23:03 UTC (rev 20211)
@@(protected) @@
   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();

_______________________________________________
hibernate-commits mailing list
hibernate-commits@(protected)
https://lists.jboss.org/mailman/listinfo/hibernate-commits
©2008 gg3721.com - Jax Systems, LLC, U.S.A.