RED-6467: Rearranged code so that query-objects are not re-used to see if it fixes transaction behavior
This commit is contained in:
parent
d8a0ec0467
commit
1fe598f407
@ -2,6 +2,7 @@ package com.iqser.red.service.persistence.management.v1.processor.service.persis
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
@ -36,24 +37,9 @@ class QueryExecutor {
|
||||
EntityManager entityManager;
|
||||
|
||||
|
||||
// The call to query.getResultList returns an untyped list, there is no way around that.
|
||||
// So we suppress the warning.
|
||||
// CAUTION: Make sure that the query actually returns a list of Strings.
|
||||
@SuppressWarnings("unchecked")
|
||||
@Transactional
|
||||
public LinkedList<String> runUndeleteQueryInBatches(String typeId, Set<String> entries, long version, String tableName) {
|
||||
|
||||
String fetchSql = getFetchEntryValuesQuery(tableName);
|
||||
|
||||
Query fetchEntryValuesQuery = entityManager.createNativeQuery(fetchSql);
|
||||
fetchEntryValuesQuery.setParameter("typeId", typeId);
|
||||
|
||||
String updateSql = getUpdateEntriesQuery(tableName);
|
||||
|
||||
Query updateEntriesQuery = entityManager.createNativeQuery(updateSql);
|
||||
updateEntriesQuery.setParameter("typeId", typeId);
|
||||
updateEntriesQuery.setParameter("version", version);
|
||||
|
||||
var results = new LinkedList<String>();
|
||||
|
||||
var entryList = new ArrayList<>(entries);
|
||||
@ -65,11 +51,12 @@ class QueryExecutor {
|
||||
break;
|
||||
}
|
||||
|
||||
fetchEntryValuesQuery.setParameter("entries", entryList.subList(fromIndex, toIndex));
|
||||
results.addAll(fetchEntryValuesQuery.getResultList());
|
||||
var values = entryList.subList(fromIndex, toIndex);
|
||||
|
||||
updateEntriesQuery.setParameter("entries", entryList.subList(fromIndex, toIndex));
|
||||
updateEntriesQuery.executeUpdate();
|
||||
var entryValues = executeFetchValuesQuery(typeId, tableName, values);
|
||||
results.addAll(entryValues);
|
||||
|
||||
executeUpdateQuery(typeId, version, tableName, values);
|
||||
|
||||
fromIndex += ELEMENT_CHUNK_SIZE;
|
||||
toIndex += ELEMENT_CHUNK_SIZE;
|
||||
@ -79,6 +66,35 @@ class QueryExecutor {
|
||||
}
|
||||
|
||||
|
||||
private void executeUpdateQuery(String typeId, long version, String tableName, List<String> values) {
|
||||
|
||||
String updateSql = getUpdateEntriesQuery(tableName);
|
||||
|
||||
Query updateEntriesQuery = entityManager.createNativeQuery(updateSql);
|
||||
updateEntriesQuery.setParameter("typeId", typeId);
|
||||
updateEntriesQuery.setParameter("version", version);
|
||||
|
||||
updateEntriesQuery.setParameter("entries", values);
|
||||
updateEntriesQuery.executeUpdate();
|
||||
}
|
||||
|
||||
|
||||
// The call to query.getResultList returns an untyped list, there is no way around that.
|
||||
// So we suppress the warning.
|
||||
// CAUTION: Make sure that the query actually returns a list of Strings.
|
||||
@SuppressWarnings("unchecked")
|
||||
private List<String> executeFetchValuesQuery(String typeId, String tableName, List<String> values) {
|
||||
|
||||
String fetchSql = getFetchEntryValuesQuery(tableName);
|
||||
|
||||
Query fetchEntryValuesQuery = entityManager.createNativeQuery(fetchSql);
|
||||
fetchEntryValuesQuery.setParameter("typeId", typeId);
|
||||
|
||||
fetchEntryValuesQuery.setParameter("entries", values);
|
||||
return fetchEntryValuesQuery.getResultList();
|
||||
}
|
||||
|
||||
|
||||
private String getFetchEntryValuesQuery(String tableName) {
|
||||
|
||||
return FETCH_ENTRY_VALUES_QUERY.replace("::tableName::", tableName);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user