You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by fa...@apache.org on 2010/01/30 05:46:42 UTC
svn commit: r904728 - in /openjpa/trunk:
openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/util/TestPersistenceUnitUtil.java
openjpa-persistence/src/main/java/org/apache/openjpa/persistence/OpenJPAPersistenceUtil.java
Author: faywang
Date: Sat Jan 30 04:46:42 2010
New Revision: 904728
URL: http://svn.apache.org/viewvc?rev=904728&view=rev
Log:
OPENJPA-1485: null collection value can still be treated as loaded.
Modified:
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-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=904728&r1=904727&r2=904728&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 Sat Jan 30 04:46:42 2010
@@ -347,11 +347,11 @@
// Still loaded after commit
assertTrue(puu.isLoaded(ote2, "toManyLazy"));
- // Set to null - no longer loaded per spec.
+ // Set to null - still loaded per spec.
em.getTransaction().begin();
ote2.setToManyLazy(null);
- // Considered unloaded before commit
- assertFalse(puu.isLoaded(ote2, "toManyLazy"));
+ // Considered loaded before commit
+ assertTrue(puu.isLoaded(ote2, "toManyLazy"));
em.getTransaction().commit();
//Loaded after commit
assertTrue(puu.isLoaded(ote2, "toManyLazy"));
@@ -377,14 +377,14 @@
em.getTransaction().commit();
em.clear();
ote = em.find(OneToEntity.class, ote.getId());
- // Field is eater and is immediately loaded by the application
+ // Field is eager and is immediately loaded by the application
assertTrue(puu.isLoaded(ote, "toManyEager"));
OneToEntity ote2 = new OneToEntity();
em.getTransaction().begin();
em.persist(ote2);
- // Field is null by default and not considered loaded.
- assertFalse(puu.isLoaded(ote2, "toManyEager"));
+ // Field is null by default, but after persist, it is treated as loaded.
+ assertTrue(puu.isLoaded(ote2, "toManyEager"));
em.getTransaction().commit();
// Field gets set to loaded upon commit
assertTrue(puu.isLoaded(ote2, "toManyEager"));
@@ -407,13 +407,13 @@
// Still loaded after commit
assertTrue(puu.isLoaded(ote2, "toManyEager"));
- // Set to null - no longer loaded per spec.
+ // Set to null - still loaded per spec.
em.getTransaction().begin();
ote2.setToManyEager(null);
- // Entity is considered unloaded before commit
- assertFalse(puu.isLoaded(ote2));
- // Attribute is considered unloaded before commit
- assertFalse(puu.isLoaded(ote2, "toManyEager"));
+ // Entity is considered loaded before commit
+ assertTrue(puu.isLoaded(ote2));
+ // Attribute is considered loaded before commit
+ assertTrue(puu.isLoaded(ote2, "toManyEager"));
em.getTransaction().commit();
//Loaded after commit
assertTrue(puu.isLoaded(ote2, "toManyEager"));
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=904728&r1=904727&r2=904728&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 Sat Jan 30 04:46:42 2010
@@ -151,11 +151,6 @@
if(!loadSet.get(fmd.getIndex())) {
return LoadState.NOT_LOADED;
}
- // If a collected valued attribute and it has been modified,
- // make sure it isn't null
- if (isCollectionSetToNull(sm, fmd)) {
- return LoadState.NOT_LOADED;
- }
}
FieldMetaData[] fmds = sm.getMetaData().getFields();
// Check load state of all persistent eager fetch attributes
@@ -185,28 +180,6 @@
return fmd.isInDefaultFetchGroup();
}
- /*
- * Returns true if the field is a collection type and it was explicitly
- * set to null.
- */
- private static boolean isCollectionSetToNull(OpenJPAStateManager sm, FieldMetaData fmd) {
- BitSet dirtySet = sm.getDirty();
- if (dirtySet.get(fmd.getIndex()) && isCollectionType(fmd.getDeclaredTypeCode())) {
- Object field = sm.fetchField(fmd.getIndex(), false);
- if (field == null) {
- return true;
- }
- }
- return false;
- }
-
-
- private static boolean isCollectionType(int type) {
- return (type == JavaTypes.COLLECTION ||
- type == JavaTypes.MAP ||
- type == JavaTypes.ARRAY);
- }
-
private static HashSet<OpenJPAStateManager> addToLoadSet(
HashSet<OpenJPAStateManager> pcs, OpenJPAStateManager sm) {
if (pcs == null) {
@@ -236,14 +209,14 @@
// If a collection type, determine if it is loaded
switch (fmd.getDeclaredTypeCode()) {
case JavaTypes.COLLECTION:
- return !isCollectionSetToNull(sm, fmd) &&
- isLoadedCollection(sm, fmd.getElement(),(Collection<?>)field, pcs);
+ return isLoadedCollection(sm, fmd.getElement(),
+ (Collection<?>)field, pcs);
case JavaTypes.MAP:
- return !isCollectionSetToNull(sm, fmd) &&
- isLoadedMap(sm, fmd, (Map<?,?>)field, pcs);
+ return isLoadedMap(sm, fmd,
+ (Map<?,?>)field, pcs);
case JavaTypes.ARRAY:
- return !isCollectionSetToNull(sm, fmd) &&
- isLoadedArray(sm, fmd.getElement(), (Object[])field, pcs);
+ return isLoadedArray(sm, fmd.getElement(),
+ (Object[])field, pcs);
}
// If other PC type, determine if it is loaded
if (ofsm != null && fmd.isDeclaredTypePC()) {