spotless
This commit is contained in:
parent
a944c18a38
commit
12ba6e85ea
|
@ -177,6 +177,18 @@ public abstract class BaseHapiFhirSystemDao<T extends IBaseBundle, MT> extends B
|
||||||
return myTransactionProcessor.transaction(theRequestDetails, theRequest, true);
|
return myTransactionProcessor.transaction(theRequestDetails, theRequest, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Prefetch entities into the Hibernate session.
|
||||||
|
*
|
||||||
|
* When processing several resources (e.g. transaction bundle, $reindex chunk, etc.)
|
||||||
|
* it would be slow to fetch each piece of a resource (e.g. all token index rows)
|
||||||
|
* one resource at a time.
|
||||||
|
* Instead, we fetch all the linked resources for the entire batch here so they are present in the Hibernate Session.
|
||||||
|
*
|
||||||
|
* @param theResolvedIds
|
||||||
|
* @param thePreFetchIndexes Should resource indexes be loaded
|
||||||
|
* @param <P>
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <P extends IResourcePersistentId> void preFetchResources(
|
public <P extends IResourcePersistentId> void preFetchResources(
|
||||||
List<P> theResolvedIds, boolean thePreFetchIndexes) {
|
List<P> theResolvedIds, boolean thePreFetchIndexes) {
|
||||||
|
@ -199,24 +211,7 @@ public abstract class BaseHapiFhirSystemDao<T extends IBaseBundle, MT> extends B
|
||||||
if (ids.size() >= 2) {
|
if (ids.size() >= 2) {
|
||||||
List<ResourceTable> loadedResourceTableEntries = new ArrayList<>();
|
List<ResourceTable> loadedResourceTableEntries = new ArrayList<>();
|
||||||
|
|
||||||
new QueryChunker<Long>().chunk(ids, nextChunk -> {
|
prefetchResourceTableHistoryAndProvenance(ids, loadedResourceTableEntries);
|
||||||
// List<ResourceTable> allById = myResourceTableDao.findAllById(nextChunk);
|
|
||||||
Query query = myEntityManager.createQuery("select r, h FROM ResourceTable r "
|
|
||||||
+ " LEFT JOIN fetch ResourceHistoryTable h on r.myVersion = h.myResourceVersion and r.id = h.myResourceId"
|
|
||||||
+ " left join fetch h.myProvenance"
|
|
||||||
+ " WHERE r.myId IN ( :IDS )");
|
|
||||||
query.setParameter("IDS", ids);
|
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
List<Object[]> allById = query.getResultList();
|
|
||||||
|
|
||||||
for (Object[] nextPair : allById) {
|
|
||||||
ResourceTable r = (ResourceTable) nextPair[0];
|
|
||||||
ResourceHistoryTable h = (ResourceHistoryTable) nextPair[1];
|
|
||||||
r.setCurrentVersionEntity(h);
|
|
||||||
loadedResourceTableEntries.add(r);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
List<Long> entityIds;
|
List<Long> entityIds;
|
||||||
|
|
||||||
|
@ -309,6 +304,30 @@ public abstract class BaseHapiFhirSystemDao<T extends IBaseBundle, MT> extends B
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void prefetchResourceTableHistoryAndProvenance(
|
||||||
|
List<Long> ids, List<ResourceTable> loadedResourceTableEntries) {
|
||||||
|
new QueryChunker<Long>().chunk(ids, nextChunk -> {
|
||||||
|
Query query = myEntityManager.createQuery("select r, h "
|
||||||
|
+ " FROM ResourceTable r "
|
||||||
|
+ " LEFT JOIN fetch ResourceHistoryTable h "
|
||||||
|
+ " on r.myVersion = h.myResourceVersion and r.id = h.myResourceId "
|
||||||
|
+ " left join fetch h.myProvenance "
|
||||||
|
+ " WHERE r.myId IN ( :IDS ) ");
|
||||||
|
query.setParameter("IDS", ids);
|
||||||
|
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
List<Object[]> allById = query.getResultList();
|
||||||
|
|
||||||
|
for (Object[] nextPair : allById) {
|
||||||
|
ResourceTable r = (ResourceTable) nextPair[0];
|
||||||
|
ResourceHistoryTable h = (ResourceHistoryTable) nextPair[1];
|
||||||
|
// history is a big weird - we hold it in a transient field because we also hold the new version.
|
||||||
|
r.setCurrentVersionEntity(h);
|
||||||
|
loadedResourceTableEntries.add(r);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
private void preFetchIndexes(
|
private void preFetchIndexes(
|
||||||
List<Long> theIds,
|
List<Long> theIds,
|
||||||
String typeDesc,
|
String typeDesc,
|
||||||
|
|
Loading…
Reference in New Issue