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) {