You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ht...@apache.org on 2014/03/24 17:35:09 UTC

svn commit: r1580907 - in /openjpa/branches/2.2.1.x: ./ openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cascade/TestCascadePersist.java

Author: hthomann
Date: Mon Mar 24 16:35:08 2014
New Revision: 1580907

URL: http://svn.apache.org/r1580907
Log:
OPENJPA-1986: Extra queries being generated when cascading a persist - added another/similar check to the ones added by Rick.

Modified:
    openjpa/branches/2.2.1.x/   (props changed)
    openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java
    openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cascade/TestCascadePersist.java

Propchange: openjpa/branches/2.2.1.x/
------------------------------------------------------------------------------
  Merged /openjpa/branches/2.2.x:r1580898

Modified: openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java?rev=1580907&r1=1580906&r2=1580907&view=diff
==============================================================================
--- openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java (original)
+++ openjpa/branches/2.2.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/SingleFieldManager.java Mon Mar 24 16:35:08 2014
@@ -267,7 +267,7 @@ class SingleFieldManager extends Transfe
         switch (fmd.getDeclaredTypeCode()) {
             case JavaTypes.PC:
             case JavaTypes.PC_UNTYPED:
-                if (!_broker.isDetachedNew() && _broker.isDetached(objval))
+                if (!_broker.isDetachedNew() && _broker.isDetached(objval, _checkDbOnCascadePersist))
                     return; // allow but ignore
                 _broker.persist(objval, true, call);
                 break;

Modified: openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cascade/TestCascadePersist.java
URL: http://svn.apache.org/viewvc/openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cascade/TestCascadePersist.java?rev=1580907&r1=1580906&r2=1580907&view=diff
==============================================================================
--- openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cascade/TestCascadePersist.java (original)
+++ openjpa/branches/2.2.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/cascade/TestCascadePersist.java Mon Mar 24 16:35:08 2014
@@ -21,14 +21,13 @@ package org.apache.openjpa.persistence.c
 import javax.persistence.EntityManager;
 import javax.persistence.RollbackException;
 
-import org.apache.openjpa.persistence.test.SingleEMFTestCase;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
 
-public class TestCascadePersist extends SingleEMFTestCase {
+public class TestCascadePersist extends SQLListenerTestCase {
     @Override
     public void setUp() throws Exception {
-        setUp(DROP_TABLES, CascadePersistEntity.class
-//            , "openjpa.Log", "SQL=trace"
-            );
+        setUp(DROP_TABLES, CascadePersistEntity.class, "openjpa.Compatibility",
+            "CheckDatabaseForCascadePersistToDetachedEntity=false");
     }
 
     public void testCascadePersistToDetachedFailure() {
@@ -70,4 +69,29 @@ public class TestCascadePersist extends 
         // Since cpe1 is managed, it should be ignored by the cascaded persist operation.
         em.getTransaction().commit();
     }
+    
+    /*
+     * Prior to OPENJPA-1986, an extra SELECT was executed in this scenario.
+     */
+    public void testCascaseExtraneousSQL(){
+        long id = System.currentTimeMillis();
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+
+        CascadePersistEntity cpe = new CascadePersistEntity(id);
+        CascadePersistEntity cpe2 = new CascadePersistEntity(id+1);
+        cpe.setOther(cpe2);
+
+        //Clear all SQL statements to make sure that during
+        //the persist we don't execute a select.
+        resetSQL();
+        em.persist(cpe);
+
+        em.getTransaction().commit();
+        em.close();        
+
+        //There should be no selects at this point, only
+        //inserts.
+        assertNotSQL("SELECT .*");
+    }    
 }