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 b2949deb0..89ffff757 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 @@ -2660,6 +2660,12 @@ public class StateManagerImpl for (int i = 0, len = _loaded.length(); i < len; i++) saveField(i); _flags &= ~FLAG_SAVE; + // OPENJPA-659 + // record a saved field manager even if no field is currently loaded + // as existence of a SaveFieldManager is critical for a dirty check + if (_saved == null) + _saved = new SaveFieldManager(this, getPersistenceCapable(), + _dirty); } } diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java new file mode 100644 index 000000000..c44a5646c --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/TestSimpleUnenhancedQuery.java @@ -0,0 +1,49 @@ +/** + * + * 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.enhance; + +import javax.persistence.EntityManager; + +import org.apache.openjpa.persistence.test.SingleEMFTestCase; + +/** + * A simple query fails with unenhanced (or runtime enhanced classes) + * as originally reported in + * OPENJPA-659. + * The original issue reports the failure in a Spring-Tomcat-Weaver settings + * with embedded instances but even the following test shows the same failure + * in a simpler settings. + * + * @author Pinaki Poddar + * + */ +public class TestSimpleUnenhancedQuery extends SingleEMFTestCase { + public void setUp() throws Exception { + setUp(CLEAR_TABLES, UnenhancedPObject.class); + EntityManager em = emf.createEntityManager(); + em.getTransaction().begin(); + em.persist(new UnenhancedPObject()); + em.getTransaction().commit(); + } + + public void testExtentQuery() { + EntityManager em = emf.createEntityManager(); + assertFalse(em.createQuery("SELECT p FROM UnenhancedPObject p") + .getResultList().isEmpty()); + } +} diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java new file mode 100644 index 000000000..4812fbf2e --- /dev/null +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/enhance/UnenhancedPObject.java @@ -0,0 +1,25 @@ +/** + * + * 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.enhance; + +import javax.persistence.Entity; + +@Entity +public class UnenhancedPObject { + +}