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();
+ }
+}