use of org.datanucleus.store.rdbms.request.LocateBulkRequest in project datanucleus-rdbms by datanucleus.
the class RDBMSPersistenceHandler method locateObjects.
// ------------------------------ Locate ----------------------------------
public void locateObjects(ObjectProvider[] ops) {
if (ops == null || ops.length == 0) {
return;
}
ClassLoaderResolver clr = ops[0].getExecutionContext().getClassLoaderResolver();
Map<DatastoreClass, List<ObjectProvider>> opsByTable = new HashMap<>();
for (int i = 0; i < ops.length; i++) {
AbstractClassMetaData cmd = ops[i].getClassMetaData();
DatastoreClass table = getDatastoreClass(cmd.getFullClassName(), clr);
// Use root table in hierarchy
table = table.getBaseDatastoreClass();
List<ObjectProvider> opList = opsByTable.get(table);
if (opList == null) {
opList = new ArrayList<>();
}
opList.add(ops[i]);
opsByTable.put(table, opList);
}
Iterator<Map.Entry<DatastoreClass, List<ObjectProvider>>> tableIter = opsByTable.entrySet().iterator();
while (tableIter.hasNext()) {
Map.Entry<DatastoreClass, List<ObjectProvider>> entry = tableIter.next();
DatastoreClass table = entry.getKey();
List<ObjectProvider> tableOps = entry.getValue();
// TODO This just uses the base table. Could change to use the most-derived table
// which would permit us to join to supertables and load more fields during this process
LocateBulkRequest req = new LocateBulkRequest(table);
req.execute(tableOps.toArray(new ObjectProvider[tableOps.size()]));
}
}
Aggregations