//### 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;
for (int i = 0; i < fields.length; i++) {
eres = res.getEager(fields[i]);
res.startDataRequest(fields[i]);
try {
if (eres == res)
fields[i].loadEagerJoin(em, store, fetch, res);
else if (eres != null) {
processed =
fields[i].loadEagerParallel(em, store, fetch, eres);
if (processed != eres)
res.putEager(fields[i], processed);
} else
fields[i].load(em, store, fetch, res);
loaded |= em.getLoaded().get(i);
} finally {
res.endDataRequest();
}
}
// after loading everything from result, load the rest of the
// configured fields
if (loaded)
em.load(fetch);
}