Search in sources :

Example 1 with LocateBulkRequest

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()]));
    }
}
Also used : HashMap(java.util.HashMap) ConcurrentReferenceHashMap(org.datanucleus.util.ConcurrentReferenceHashMap) ClassLoaderResolver(org.datanucleus.ClassLoaderResolver) AbstractClassMetaData(org.datanucleus.metadata.AbstractClassMetaData) ArrayList(java.util.ArrayList) List(java.util.List) ObjectProvider(org.datanucleus.state.ObjectProvider) SecondaryDatastoreClass(org.datanucleus.store.rdbms.table.SecondaryDatastoreClass) DatastoreClass(org.datanucleus.store.rdbms.table.DatastoreClass) LocateBulkRequest(org.datanucleus.store.rdbms.request.LocateBulkRequest) HashMap(java.util.HashMap) ConcurrentReferenceHashMap(org.datanucleus.util.ConcurrentReferenceHashMap) Map(java.util.Map)

Aggregations

ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 Map (java.util.Map)1 ClassLoaderResolver (org.datanucleus.ClassLoaderResolver)1 AbstractClassMetaData (org.datanucleus.metadata.AbstractClassMetaData)1 ObjectProvider (org.datanucleus.state.ObjectProvider)1 LocateBulkRequest (org.datanucleus.store.rdbms.request.LocateBulkRequest)1 DatastoreClass (org.datanucleus.store.rdbms.table.DatastoreClass)1 SecondaryDatastoreClass (org.datanucleus.store.rdbms.table.SecondaryDatastoreClass)1 ConcurrentReferenceHashMap (org.datanucleus.util.ConcurrentReferenceHashMap)1