OPENJPA-680 - After load and after refresh callbacks were each resulting in a post load call resulting in the duplicate call. Fix addresses the same and re-introduces the original fix(Merge back from trunk).
git-svn-id: https://svn.apache.org/repos/asf/openjpa/branches/0.9.7-r547073@719358 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
index f170420..4ce688a 100644
--- a/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
+++ b/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
@@ -320,7 +320,8 @@
*/
protected boolean load(FetchConfiguration fetch, int loadMode,
BitSet exclude, Object sdata, boolean forWrite) {
- if (!forWrite && (!isPersistent() || isNew() || isDeleted()))
+ if (!forWrite
+ && (!isPersistent() || (isNew() && !isFlushed()) || isDeleted()))
return false;
// if any fields being loaded, do state transitions for read
diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
new file mode 100644
index 0000000..cd84f7a
--- /dev/null
+++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/simple/TestRefresh.java
@@ -0,0 +1,39 @@
+/*
+ * 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.simple;
+
+import org.apache.openjpa.persistence.test.SingleEMTestCase;
+
+public class TestRefresh extends SingleEMTestCase {
+
+ public void setUp() {
+ super.setUp(CLEAR_TABLES, Item.class, "openjpa.AutoDetach", "commit");
+ }
+
+ public void testFlushRefreshNewInstance() {
+ em.getTransaction().begin();
+ Item item = new Item();
+ item.setItemData("Test Data");
+ em.persist(item);
+ em.flush();
+ em.refresh(item);
+ em.getTransaction().commit();
+ assertEquals("Test Data", item.getItemData());
+ }
+}
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java
index 2f1a9c8..64f81f9 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/MetaDataParsers.java
@@ -57,8 +57,7 @@
case POST_UPDATE:
return new int[]{ LifecycleEvent.AFTER_STORE };
case POST_LOAD:
- return new int[]{ LifecycleEvent.AFTER_LOAD,
- LifecycleEvent.AFTER_REFRESH };
+ return new int[]{ LifecycleEvent.AFTER_LOAD };
default:
return null;
}
diff --git a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java
index 60738b4..bad534a 100644
--- a/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java
+++ b/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/PersistenceListenerAdapter.java
@@ -91,7 +91,7 @@
}
public void afterRefresh(LifecycleEvent event) {
- makeCallback(event);
+ // no analagous callback
}
public void beforeStore(LifecycleEvent event) {