You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by ss...@apache.org on 2008/09/05 08:00:19 UTC

svn commit: r692342 - in /openjpa/branches/0.9.7-r547073: openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/ openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/pe...

Author: ssegu
Date: Thu Sep  4 23:00:18 2008
New Revision: 692342

URL: http://svn.apache.org/viewvc?rev=692342&view=rev
Log:
Merge back 656796 - Bugfix for multiple insert,delete,query cycles of the same id in the same transaction.

Added:
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/apps/
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/apps/RuntimeTest1.java
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/
    openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java
Modified:
    openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java

Modified: openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java?rev=692342&r1=692341&r2=692342&view=diff
==============================================================================
--- openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java (original)
+++ openjpa/branches/0.9.7-r547073/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/BrokerImpl.java Thu Sep  4 23:00:18 2008
@@ -4382,7 +4382,7 @@
             if (sm != null) {
                 // if it's a new instance, we know it's the only match, because
                 // other pers instances override new instances in _cache
-                if (sm.isNew())
+                if (sm.isNew() && !sm.isDeleted())
                     return (allowNew) ? sm : null;
                 if (!allowNew || !sm.isDeleted())
                     return sm;

Added: openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/apps/RuntimeTest1.java
URL: http://svn.apache.org/viewvc/openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/apps/RuntimeTest1.java?rev=692342&view=auto
==============================================================================
--- openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/apps/RuntimeTest1.java (added)
+++ openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/common/apps/RuntimeTest1.java Thu Sep  4 23:00:18 2008
@@ -0,0 +1,143 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+package org.apache.openjpa.persistence.common.apps;
+
+import java.io.*;
+import java.math.*;
+import java.util.*;
+
+import javax.persistence.CascadeType;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.FetchType;
+import javax.persistence.GeneratedValue;
+import javax.persistence.Id;
+import javax.persistence.Inheritance;
+import javax.persistence.InheritanceType;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
+import javax.persistence.Table;
+import javax.persistence.Transient;
+
+
+/**
+ *	<p>Persitent type used in testing.</p>
+ *
+ *	@author		Abe White
+ */
+@Entity
+@Table(name="rtest1")
+@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
+public class RuntimeTest1 implements Serializable
+{
+
+	private static final long serialVersionUID = 1L;
+
+	@Transient
+	public static final String someStaticField = "someField";
+
+	private Locale		localeField;
+
+	@Id
+	private int			intField;
+
+	@Column(length=35)
+	private String		stringField;
+
+	// transactional only
+	@Column(length=35)
+	public String		transString;
+
+	// relations
+	//@Transient
+	@OneToOne(fetch=FetchType.LAZY, cascade={CascadeType.PERSIST, CascadeType.REMOVE})
+	private RuntimeTest1	selfOneOne;
+
+	@Transient
+	private Set		selfOneMany = new HashSet ();
+
+
+	public RuntimeTest1 ()
+	{}
+
+	public RuntimeTest1(int key)
+	{
+		this.intField = key;
+	}
+
+	public RuntimeTest1 (String str, int i)
+	{
+		stringField = str;
+		intField = i;
+	}
+
+	public int getIntField ()
+	{
+		return this.intField;
+	}
+
+
+	public void setIntField (int intField)
+	{
+		this.intField = intField;
+	}
+
+	public String getStringField ()
+	{
+		return this.stringField;
+	}
+
+	public void setStringField (String stringField)
+	{
+		this.stringField = stringField;
+	}
+
+	public RuntimeTest1 getSelfOneOne ()
+	{
+		return this.selfOneOne;
+	}
+
+	public void setSelfOneOne (RuntimeTest1 selfOneOne)
+	{
+		this.selfOneOne = selfOneOne;
+	}
+
+	public Set getSelfOneMany ()
+	{
+		return this.selfOneMany;
+	}
+
+	public void setSelfOneMany (Set selfOneMany)
+	{
+		this.selfOneMany = selfOneMany;
+	}
+
+	public String toString()
+	{
+		return "IntField: "+intField+", StringField: "+stringField+" .";
+	}
+
+	public Locale getLocaleField() {
+		return localeField;
+	}
+
+	public void setLocaleField(Locale localeField) {
+		this.localeField = localeField;
+	}
+}

Added: openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java
URL: http://svn.apache.org/viewvc/openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java?rev=692342&view=auto
==============================================================================
--- openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java (added)
+++ openjpa/branches/0.9.7-r547073/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java Thu Sep  4 23:00:18 2008
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openjpa.persistence.kernel;
+
+import javax.persistence.Query;
+
+import org.apache.openjpa.persistence.common.apps.RuntimeTest1;
+import org.apache.openjpa.persistence.test.SingleEMTestCase;
+
+public class TestMultipleInsertDeleteSameId
+    extends SingleEMTestCase {
+
+    public void setUp() {
+        setUp(RuntimeTest1.class);
+    }
+
+    public void testMultipleInsertDelete() {
+        em.getTransaction().begin();
+
+        RuntimeTest1 o = new RuntimeTest1("one", 99);
+        em.persist(o);
+        Query q = em.createQuery("select o from RuntimeTest1 o "
+          + " where o.stringField = 'one'"); 
+        assertEquals(o, q.getSingleResult());
+
+        em.remove(o);
+        assertEquals(0, q.getResultList().size());
+      
+        RuntimeTest1 o2 = new RuntimeTest1("two", 99);
+        em.persist(o2);
+        q = em.createQuery("select o from RuntimeTest1 o "
+          + " where o.stringField = 'two'"); 
+        assertEquals(o2, q.getSingleResult());
+
+        em.remove(o2);
+        assertEquals(0, q.getResultList().size());
+
+        em.getTransaction().commit();
+        assertNull(em.find(RuntimeTest1.class, 99));
+        em.close();
+    }
+}