Author: faywang
Date: Thu Jan 28 00:04:31 2010
New Revision: 903914
URL: http://svn.apache.org/viewvc?rev=903914&view=rev
Log:
OPENJPA-1485: isLoaded util method should return true for an entity when an
unloaded basic type is not in the fetch plan.
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
Modified:
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java?rev=903914&r1=903913&r2=903914&view=diff
==============================================================================
---
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
(original)
+++
openjpa/trunk/openjpa-kernel/src/main/java/org/apache/openjpa/kernel/StateManagerImpl.java
Thu Jan 28 00:04:31 2010
@@ -3376,4 +3376,8 @@
public List<FieldMetaData> getMappedByIdFields() {
return _mappedByIdFields;
}
+
+ public boolean requiresFetch(FieldMetaData fmd) {
+ return (_broker.getFetchConfiguration().requiresFetch(fmd) !=
FetchConfiguration.FETCH_NONE);
+ }
}
Modified:
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java?rev=903914&r1=903913&r2=903914&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
(original)
+++
openjpa/trunk/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
Thu Jan 28 00:04:31 2010
@@ -33,6 +33,7 @@
import javax.persistence.spi.PersistenceProvider;
import javax.persistence.spi.ProviderUtil;
+import org.apache.openjpa.persistence.OpenJPAEntityManager;
import org.apache.openjpa.persistence.OpenJPAEntityManagerFactorySPI;
import org.apache.openjpa.persistence.OpenJPAPersistence;
import org.apache.openjpa.persistence.PersistenceProviderImpl;
@@ -425,6 +426,24 @@
em.close();
}
+ public void testBasicTypeNotLoaded() {
+ PersistenceUnitUtil puu = emf.getPersistenceUnitUtil();
+ EntityManager em = emf.createEntityManager();
+ EagerEntity ee = createEagerEntity();
+ int id = ee.getId();
+
+ em.getTransaction().begin();
+ em.persist(ee);
+ em.getTransaction().commit();
+ em.clear();
+ // name is not eagerly loaded, only eagerEmbed is eagerly loaded
+ OpenJPAEntityManager kem = OpenJPAPersistence.cast(em);
+ kem.getFetchPlan().resetFetchGroups().removeFetchGroup("default")
+ .addField(EagerEntity.class, "eagerEmbed");
+ ee = em.find(EagerEntity.class, id);
+ assertEquals(true, puu.isLoaded(ee));
+ }
+
private EagerEntity createEagerEntity() {
EagerEntity ee = new EagerEntity();
ee.setId(new Random().nextInt());
Modified:
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
URL:
http://svn.apache.org/viewvc/openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java?rev=903914&r1=903913&r2=903914&view=diff
==============================================================================
---
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
(original)
+++
openjpa/trunk/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
Thu Jan 28 00:04:31 2010
@@ -29,6 +29,7 @@
import org.apache.openjpa.enhance.StateManager;
import org.apache.openjpa.kernel.Broker;
import org.apache.openjpa.kernel.OpenJPAStateManager;
+import org.apache.openjpa.kernel.StateManagerImpl;
import org.apache.openjpa.meta.FieldMetaData;
import org.apache.openjpa.meta.JavaTypes;
import org.apache.openjpa.meta.ValueMetaData;
@@ -161,7 +162,7 @@
if (fmds != null && fmds.length > 0) {
pcs = addToLoadSet(pcs, sm);
for (FieldMetaData fmd : fmds) {
- if (fmd.isInDefaultFetchGroup()) {
+ if (((StateManagerImpl)sm).requiresFetch(fmd)) {
if (!isLoadedField(sm, fmd, pcs)) {
isLoaded = false;
break;