Author: awhite Date: Thu May 15 12:18:27 2008 New Revision: 656796 URL: http://svn.apache.org/viewvc?rev=656796&view=rev Log: Bugfix for multiple insert,delete,query cycles of the same id in the same transaction.
Added: openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java Modified: openjpa/branches/1.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java Modified: openjpa/branches/1.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java?rev=656796&r1=656795&r2=656796&view=diff ============================================================================== --- openjpa/branches/1.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java (original) +++ openjpa/branches/1.1.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java Thu May 15 12:18:27 2008 @@ -71,7 +71,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/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java?rev=656796&view=auto ============================================================================== --- openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java (added) +++ openjpa/branches/1.1.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java Thu May 15 12:18:27 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, CLEAR_TABLES); + } + + 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(); + } +}