OPENJPA-733: Updated state manager to use actual oid instead of owner oid.

git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@700563 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jeremy Bauer 2008-09-30 19:42:11 +00:00
parent 0226888590
commit ab42492100
2 changed files with 3330 additions and 3259 deletions

View File

@ -18,7 +18,11 @@
*/ */
package org.apache.openjpa.persistence.embed; package org.apache.openjpa.persistence.embed;
import java.util.List;
import javax.persistence.EntityManager; import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import org.apache.openjpa.persistence.test.SingleEMFTestCase; import org.apache.openjpa.persistence.test.SingleEMFTestCase;
public class TestEmbedded extends SingleEMFTestCase { public class TestEmbedded extends SingleEMFTestCase {
@ -42,5 +46,71 @@ public class TestEmbedded extends SingleEMFTestCase {
em.persist(a); em.persist(a);
em.getTransaction().commit(); 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();
}
}
}