You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by de...@apache.org on 2009/08/10 17:52:13 UTC

svn commit: r802837 - in /openjpa/branches/1.1.x: openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persiste...

Author: dezzio
Date: Mon Aug 10 15:52:12 2009
New Revision: 802837

URL: http://svn.apache.org/viewvc?rev=802837&view=rev
Log:
OpenJPA-935: Merged fix from trunk, rev 746640: "Removing entities with Embedded field issue multiple delete statements"

Modified:
    openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
    openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
    openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java
    openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java

Modified: openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java?rev=802837&r1=802836&r2=802837&view=diff
==============================================================================
--- openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java (original)
+++ openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/kernel/JDBCStoreQuery.java Mon Aug 10 15:52:12 2009
@@ -572,7 +572,8 @@
      * returns INVALID. Also returns INVALID if field is dependent.
      */
     private Table getTable(FieldMapping fm, Table table) {
-        if (fm.getCascadeDelete() != ValueMetaData.CASCADE_NONE)
+        if (fm.getCascadeDelete() != ValueMetaData.CASCADE_NONE 
+            && !fm.isEmbeddedPC())
             return INVALID;
 
         Column[] columns = fm.getColumns();

Modified: openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java?rev=802837&r1=802836&r2=802837&view=diff
==============================================================================
--- openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java (original)
+++ openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java Mon Aug 10 15:52:12 2009
@@ -19,9 +19,10 @@
 package org.apache.openjpa.persistence.embed;
 
 import javax.persistence.EntityManager;
+import org.apache.openjpa.persistence.test.SQLListenerTestCase;
 import org.apache.openjpa.persistence.test.SingleEMFTestCase;
 
-public class TestEmbedded extends SingleEMFTestCase {
+public class TestEmbedded extends SQLListenerTestCase {
     public void setUp() {
         super.setUp(BaseEntity.class, Address.class, Geocode.class,
                 CLEAR_TABLES);
@@ -42,5 +43,46 @@
         em.persist(a);
         em.getTransaction().commit();
     }
+    
+    public void testDeleteEmbeddedDoesNotSelectBeforeDelete() {
+        EntityManager em = emf.createEntityManager();
+        em.getTransaction().begin();
+        String[] streets = {"S1", "S2", "S3"};
+        String[] cities = {"C1", "C2", "C3"};
+        String[] states = {"AB", "CD", "EF"};
+        int[] zips = {123456, 345678, 456789};
+        
+        for (int i = 0; i < streets.length; i++) {
+            Address a = new Address();
+            a.setStreetAddress(streets[i]);
+            a.setCity(cities[i]);
+            a.setState(states[i]);
+            a.setZip(zips[i]);
+            Geocode g = new Geocode();
+            g.setLatitude(i+1.0f);
+            g.setLongtitude(i+6.0f);
+            a.setGeocode(g);
+            em.persist(a);
+        } 
+        em.getTransaction().commit();
+        
+        em = emf.createEntityManager();
+        em.getTransaction().begin();
+        sql.clear();
+        int count = em.createQuery("DELETE FROM Address a WHERE a.zip=:zip")
+            .setParameter("zip", zips[0])
+            .executeUpdate();
+        assertEquals(1, count);
+        em.getTransaction().commit();
+        assertEquals(1, sql.size());
+        
+        em.getTransaction().begin();
+        sql.clear();
+        count = em.createQuery("DELETE FROM Address").executeUpdate();
+        assertEquals(streets.length-1, count);
+        assertTrue(count>1);
+        em.getTransaction().commit();
+        assertEquals(1, sql.size());
+    }
 
 }
\ No newline at end of file

Modified: openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java?rev=802837&r1=802836&r2=802837&view=diff
==============================================================================
--- openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java (original)
+++ openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/jdbc/annotations/TestNonstandardMappingAnnotations.java Mon Aug 10 15:52:12 2009
@@ -48,7 +48,7 @@
         setUp(NonstandardMappingEntity.class, ExtensionsEntity.class,
             NonstandardMappingMappedSuper.class, EmbedValue2.class,
             EmbedValue.class,
-            CLEAR_TABLES);
+            CLEAR_TABLES, RETAIN_DATA);
 
         // trigger complete resolution of metadata etc.
         emf.createEntityManager().close();

Modified: openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java?rev=802837&r1=802836&r2=802837&view=diff
==============================================================================
--- openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java (original)
+++ openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/test/PersistenceTestCase.java Mon Aug 10 15:52:12 2009
@@ -47,6 +47,9 @@
 public abstract class PersistenceTestCase
     extends TestCase {
 
+    public static final String RETAIN_DATA = "Retain data after test run";
+    private boolean retainDataOnTearDown;
+    
     /**
      * Marker object you an pass to {@link #setUp} to indicate that the
      * database tables should be cleared.
@@ -93,6 +96,10 @@
         List<Class> types = new ArrayList<Class>();
         boolean prop = false;
         for (int i = 0; i < props.length; i++) {
+            if (props[i] == RETAIN_DATA) {
+                retainDataOnTearDown= true;
+                continue;
+            }
             if (prop) {
                 map.put(props[i - 1], props[i]);
                 prop = false;
@@ -213,7 +220,8 @@
         // before issuing delete statements on a new entity manager.
         if (closeEMs)
             closeAllOpenEMs(emf);
-
+        if (retainDataOnTearDown)
+            return;
         EntityManager em = emf.createEntityManager();
         em.getTransaction().begin();
         for (ClassMetaData meta : types) {