From 12c0a094ee5976bf95253c04e5c3fb02f9221344 Mon Sep 17 00:00:00 2001 From: Patrick Linskey Date: Wed, 11 Jun 2008 23:59:15 +0000 Subject: [PATCH] Merge from ../branches/1.1.x. svn merge -c 656796 ../branches/1.1.x git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@666919 13f79535-47bb-0310-9956-ffa450edef68 --- .../apache/openjpa/kernel/ManagedCache.java | 2 +- .../TestMultipleInsertDeleteSameId.java | 58 +++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java index 698d65eba..36371784c 100644 --- a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java +++ b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/ManagedCache.java @@ -71,7 +71,7 @@ class ManagedCache implements Serializable { 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; diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java new file mode 100644 index 000000000..ad3ac2907 --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/kernel/TestMultipleInsertDeleteSameId.java @@ -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(); + } +}