Java Mailing List Archive

http://www.gg3721.com/

Home » Hibernate Commits List »

[hibernate-commits] Hibernate SVN: r14911 - in
 core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938:
 src/org/hibernate/cfg and 2 other directories.

hibernate-commits

2008-07-09


Author LoginPost Reply
Author: cbredesen
Date: 2008-07-09 18:04:57 -0400 (Wed, 09 Jul 2008)
New Revision: 14911

Modified:
 core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/build.xml
 core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/cfg/Environment.java
 core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/type/CollectionType.java
 core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/test/org/hibernate/test/ops/MergeTest.java
Log:
JBPAPP-938 ported changes, incremented version

Modified: core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/build.xml
===================================================================
--- core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/build.xml  2008-07-09 21:25:39 UTC (rev 14910)
+++ core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/build.xml  2008-07-09 22:04:57 UTC (rev 14911)
@@(protected) @@
 <property name="version.major" value="3"/>
 <property name="version.minor" value="2"/>
 <property name="version.micro" value="4"/>
-   <property name="version.qualifier" value="sp1"/>
+   <property name="version.qualifier" value="sp1.JBPAPP-938"/>
  <property name="version.full" value="${version.major}.${version.minor}.${version.micro}.${version.qualifier}"/>
  <property name="version.major_minor" value="${version.major}.${version.minor}"/>
  <property name="fullname" value="${name}-${version.full}"/>

Modified: core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/cfg/Environment.java
===================================================================
--- core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/cfg/Environment.java  2008-07-09 21:25:39 UTC (rev 14910)
+++ core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/cfg/Environment.java  2008-07-09 22:04:57 UTC (rev 14911)
@@(protected) @@
*/
public final class Environment {

-  public static final String VERSION = "3.2.4.sp1";
+  public static final String VERSION = "3.2.4.sp1.JBPAPP-938";

 /**
  * <tt>ConnectionProvider</tt> implementor to use when obtaining connections

Modified: core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/type/CollectionType.java
===================================================================
--- core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/type/CollectionType.java  2008-07-09 21:25:39 UTC (rev 14910)
+++ core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/src/org/hibernate/type/CollectionType.java  2008-07-09 22:04:57 UTC (rev 14911)
@@(protected) @@
   //the array length might not match
   result = replaceElements( original, result, owner, copyCache, session );
   
-    if (original==target) {
-      //get the elements back into the target
+    if ( original == target ) {
+      // get the elements back into the target making sure to handle dirty flag
+      boolean wasClean = PersistentCollection.class.isInstance( target ) && !( ( PersistentCollection ) target ).isDirty();
     //TODO: this is a little inefficient, don't need to do a whole
     //    deep replaceElements() call
     replaceElements( result, target, owner, copyCache, session );
+      if ( wasClean ) {
+        ( ( PersistentCollection ) target ).clearDirty();
+      }
     result = target;
   }
       

Modified: core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/test/org/hibernate/test/ops/MergeTest.java
===================================================================
--- core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/test/org/hibernate/test/ops/MergeTest.java  2008-07-09 21:25:39 UTC (rev 14910)
+++ core/patches/Branch_3_2_4_SP1_CP02_JBPAPP-938/test/org/hibernate/test/ops/MergeTest.java  2008-07-09 22:04:57 UTC (rev 14911)
@@(protected) @@
   cleanup();
  }

+  public void testNoExtraUpdatesOnPersistentMergeVersionedWithCollection() throws Exception {
+    Session s = openSession();
+    s.beginTransaction();
+    VersionedEntity parent = new VersionedEntity( "parent", "parent" );
+    VersionedEntity child = new VersionedEntity( "child", "child" );
+    parent.getChildren().add( child );
+    child.setParent( parent );
+    s.persist( parent );
+    s.getTransaction().commit();
+    s.close();
+
+    clearCounts();
+
+    // parent is now detached, but we have made no changes. so attempt to merge it
+    // into this new session; this should cause no updates...
+    s = openSession();
+    s.beginTransaction();
+    // load parent so that merge will follow entityIsPersistent path
+    VersionedEntity persistentParent = ( VersionedEntity ) s.get( VersionedEntity.class, parent.getId() );
+    // load children
+    VersionedEntity persistentChild = ( VersionedEntity ) persistentParent.getChildren().iterator().next();
+    VersionedEntity mergedParent = ( VersionedEntity ) s.merge( persistentParent ); // <-- This merge leads to failure
+    s.getTransaction().commit();
+    s.close();
+
+    assertUpdateCount( 0 );
+    assertInsertCount( 0 );
+    assertEquals( "unexpected parent version increment", parent.getVersion(), mergedParent.getVersion() );
+    VersionedEntity mergedChild = ( VersionedEntity ) mergedParent.getChildren().iterator().next();
+    assertEquals( "unexpected child version increment", child.getVersion(), mergedChild.getVersion() );
+
+    ///////////////////////////////////////////////////////////////////////
+    // as a control measure, now update the node once it is loaded and
+    // make sure we get an update as a result...
+    s = openSession();
+    s.beginTransaction();
+    persistentParent = ( VersionedEntity ) s.get( VersionedEntity.class, parent.getId() );
+    persistentParent.setName( "new name" );
+    persistentParent.getChildren().add( new VersionedEntity( "child2", "new child" ) );
+    persistentParent = ( VersionedEntity ) s.merge( persistentParent );
+    s.getTransaction().commit();
+    s.close();
+    assertUpdateCount( 1 );
+    assertInsertCount( 1 );
+    ///////////////////////////////////////////////////////////////////////
+
+    // cleanup();
+  }
+
 public void testPersistThenMergeInSameTxnWithVersion() {
   Session s = openSession();
   Transaction tx = s.beginTransaction();

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