You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openjpa.apache.org by pc...@apache.org on 2008/04/23 00:46:06 UTC

svn commit: r650684 - /openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java

Author: pcl
Date: Tue Apr 22 15:45:49 2008
New Revision: 650684

URL: http://svn.apache.org/viewvc?rev=650684&view=rev
Log:
OPENJPA-576. Committing on behalf of Sandeep Shrivastava.

Modified:
    openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java

Modified: openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java
URL: http://svn.apache.org/viewvc/openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java?rev=650684&r1=650683&r2=650684&view=diff
==============================================================================
--- openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java (original)
+++ openjpa/branches/1.1.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/EmbedFieldStrategy.java Tue Apr 22 15:45:49 2008
@@ -410,14 +410,13 @@
         //### we selected the embedded object fields and load the object
         //### immediately; this will be inefficient when the embedded object
         //### was not selected after all
-
         StoreContext ctx = store.getContext();
         OpenJPAStateManager em = ctx.embed(null, null, sm, field);
         sm.storeObject(field.getIndex(), em.getManagedInstance());
 
         FieldMapping[] fields = field.getEmbeddedMapping().getFieldMappings();
         Object eres, processed;
-        boolean loaded = false;
+        boolean needsLoad = false;
         for (int i = 0; i < fields.length; i++) {
             eres = res.getEager(fields[i]);
             res.startDataRequest(fields[i]);
@@ -429,18 +428,24 @@
                         fields[i].loadEagerParallel(em, store, fetch, eres);
                     if (processed != eres)
                         res.putEager(fields[i], processed);
-                } else
+                } else {
                     fields[i].load(em, store, fetch, res);
-                loaded |= em.getLoaded().get(i);
+                }
+                needsLoad = needsLoad || (!em.getLoaded().get(i) && 
+                    fetch.requiresFetch(fields[i])
+                        == FetchConfiguration.FETCH_LOAD);
             } finally {
                 res.endDataRequest();
             }
         }
 
-        // after loading everything from result, load the rest of the
-        // configured fields
-        if (loaded)
-            em.load(fetch);
+        // After loading everything from result, load the rest of the
+        // configured fields if anything is missing.
+        if (needsLoad && 
+            fetch.requiresFetch(field.getFieldMetaData()) == 
+                JDBCFetchConfiguration.FETCH_LOAD) {
+          em.load(fetch);
+        }
     }
 
     /**