You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by mi...@apache.org on 2008/10/15 03:33:18 UTC
svn commit: r704763 - in /openjpa/branches/1.2.x:
openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
openjpa-project/NOTICE.txt
Author: mikedd
Date: Tue Oct 14 18:33:18 2008
New Revision: 704763
URL: http://svn.apache.org/viewvc?rev=704763&view=rev
Log:
OPENJPA-733 Merging Jeremy's change to 1.2.x
Modified:
openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
openjpa/branches/1.2.x/openjpa-project/NOTICE.txt
Modified: openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?rev=704763&r1=704762&r2=704763&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java (original)
+++ openjpa/branches/1.2.x/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java Tue Oct 14 18:33:18 2008
@@ -311,7 +311,8 @@
// initialize our state and add ourselves to the broker's cache
setPCState(state);
- if (_broker.getStateManagerImplById(getObjectId(), false) == null) {
+ if ( _oid == null ||
+ _broker.getStateManagerImplById(_oid, false) == null) {
_broker.setStateManager(_id, this, BrokerImpl.STATUS_INIT);
}
if (state == PCState.PNEW)
Modified: openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java?rev=704763&r1=704762&r2=704763&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java (original)
+++ openjpa/branches/1.2.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/embed/TestEmbedded.java Tue Oct 14 18:33:18 2008
@@ -18,7 +18,11 @@
*/
package org.apache.openjpa.persistence.embed;
+import java.util.List;
+
import javax.persistence.EntityManager;
+import javax.persistence.EntityTransaction;
+
import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestEmbedded extends SingleEMFTestCase {
@@ -43,4 +47,71 @@
em.getTransaction().commit();
}
+ /*
+ * This variation verifies that an embedded entity can be accessed after
+ * being detached. An entity /w embedded is persisted and then queried. The
+ * em is closed, detaching the entities, and then a getter is called on the
+ * embeddeded. If the embedded is still attached (it should not be) an
+ * IllegalStateException will be thrown.
+ *
+ * JIRA Ref: OPENJPA-733 Authors: Chris Tillman, Jeremy Bauer
+ */
+ public void testDetachedQueryEmbedded() {
+ Address a = new Address();
+ a.setStreetAddress("456 Main St");
+ a.setCity("New York");
+ a.setState("NY");
+ a.setZip(12955);
+ Geocode g = new Geocode();
+ g.setLatitude(1.0f);
+ g.setLongtitude(2.0f);
+ a.setGeocode(g);
+
+ persistAddress(a);
+
+ Address a2 =
+ queryAddresses(
+ "select address from Address address"
+ + " where address.streetAddress = '456 Main St'").get(0);
+
+ assertEquals(a2.getGeocode().getLatitude(), 1.0f);
+ }
+
+ private void persistAddress(Address address) {
+ final EntityManager em = emf.createEntityManager();
+ final EntityTransaction tx = em.getTransaction();
+
+ tx.begin();
+
+ try {
+ em.persist(address);
+ tx.commit();
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ assertEquals(address.getGeocode().getLatitude(), 1.0f);
+ }
+
+ private List<Address> queryAddresses(String query) {
+ final EntityManager em = emf.createEntityManager();
+ final EntityTransaction tx = em.getTransaction();
+
+ tx.begin();
+
+ try {
+ final List<Address> list =
+ (List<Address>) em.createQuery(query).getResultList();
+ tx.commit();
+ return list;
+ } finally {
+ if (tx.isActive()) {
+ tx.rollback();
+ }
+ em.close();
+ }
+ }
+
}
\ No newline at end of file
Modified: openjpa/branches/1.2.x/openjpa-project/NOTICE.txt
URL: http://svn.apache.org/viewvc/openjpa/branches/1.2.x/openjpa-project/NOTICE.txt?rev=704763&r1=704762&r2=704763&view=diff
==============================================================================
--- openjpa/branches/1.2.x/openjpa-project/NOTICE.txt (original)
+++ openjpa/branches/1.2.x/openjpa-project/NOTICE.txt Tue Oct 14 18:33:18 2008
@@ -16,5 +16,7 @@
Sun Microsystems and licensed under the CDDL 1.0. The source code is
available at: https://glassfish.dev.java.net/source/browse/glassfish/
-* OpenJPA includes software written by Miroslav Nachev
+* OpenJPA includes software written by Miroslav Nachev.
+
+* OpenJPA uses test code written by Charles Tillman.