if (refAnn.lazy() && LazyFeatureDependencies.assertDependencyFullFilled()) {
final Object dbVal = mf.getDbObjectValue(dbObject);
if (dbVal != null) {
references = mapper.getProxyFactory()
.createListProxy(references, referenceObjClass, refAnn.ignoreMissing(), mapper.getDatastoreProvider());
final ProxiedEntityReferenceList referencesAsProxy = (ProxiedEntityReferenceList) references;
if (dbVal instanceof List) {
final List<Object> refList = (List) dbVal;
final List<DBRef> dbRefList = (List) dbVal;
final DatastoreImpl dsi = (DatastoreImpl) mapper.getDatastoreProvider().get();
final List<Key<Object>> keys = refAnn.idOnly()
? dsi.getKeysByManualRefs(referenceObjClass, refList)
: dsi.getKeysByRefs(dbRefList);
if (keys.size() != refList.size()) {
final String msg = "Some of the references could not be fetched for " + mf.getFullName() + ". " + refList + " != "
+ keys;
if (!refAnn.ignoreMissing()) {
throw new MappingException(msg);
} else {
LOG.warning(msg);
}
}
referencesAsProxy.__addAll(keys);
} else {
if (!exists(mf.getSubClass(), dbVal, cache, mapper, refAnn.idOnly())) {
final String msg = "The reference(" + dbVal.toString() + ") could not be fetched for " + mf.getFullName();
if (!refAnn.ignoreMissing()) {
throw new MappingException(msg);
} else {
LOG.warning(msg);
}
} else {
referencesAsProxy.__add(refAnn.idOnly()
? mapper.manualRefToKey(referenceObjClass, dbVal)
: mapper.refToKey((DBRef) dbVal));
}
}
}