mirror of https://github.com/apache/openjpa.git
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:
parent
0226888590
commit
ab42492100
|
@ -311,7 +311,8 @@ public class StateManagerImpl
|
|||
|
||||
// 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)
|
||||
|
|
|
@ -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,70 @@ public class TestEmbedded extends SingleEMFTestCase {
|
|||
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();
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue