Мне нужно выполнить несколько запросов через шаблон jdb c в одном соединении. Я использую SQL сервер с драйвером ms sql jdb c. Вот запрос:
IF OBJECT_ID('tempdb..#temp') IS NULL
SELECT * INTO #temp FROM ( SELECT * FROM "complex query here" ) a
DECLARE @page_size INT
SET @page_size = ?
SELECT *
FROM ( SELECT TOP(@page_size) * FROM #temp
WHERE custom_column > ?
ORDER BY custom_column ) inner_query
(MULTIPLE JOINES HERE)
ORDER BY custom_column
Запрос просто помещает весь результат сложного запроса во временную таблицу, если таблица не существует, и выбирает страницы из сгенерированной временной таблицы. Поскольку временные таблицы имеют область подключения, мне нужно выполнить весь пейджинг с несколькими запросами в одном подключении. Это код, который я пробовал:
try (Connection connection = dataSource.getConnection()) {
while (true) {
List<CustomObject> customObjects = customRepository.
.getCustomObjectsPage(connection, pageSize, minimumValueInWhere);
// business logic here..
if (customObjects.size() < pageSize) {
break;
}
minimumValueInWhere = customObjects.get(customObjects.size() - 1).getId().toString();
}
}
и getCustomObjectsPage ():
public List<CustomObject> getCustomObjectsPage(Connection connection, int pageSize,
String parameter) {
JdbcTemplate singleConnectionJdbcTemplate = new JdbcTemplate(
new SingleConnectionDataSource(connection, true));
try {
return singleConnectionJdbcTemplate
.query("the query from above", new Object[]{pageSize, parameter},
JdbcTemplateMapperFactory.newInstance()
.newResultSetExtractor(CustomObject.class)); // the root entity.
}
}
Но по некоторым причинам запросы не выполняются в одном соединении, и если я жестко закодировал параметры в запрос, вместо передачи их в шаблон jdb c, он отлично работает.
Как заставить это работать независимо от параметров?