Может ли базовое соединение JPA JDBC транслироваться?
У нас есть приложение Java EE, использующее JPA. Пользователь может попросить приложение сгенерировать какой-либо вывод (большие диаграммы и т. Д.) На основе результатов большого запроса, поэтому в этом случае мы решили использовать JDBC напрямую и циклически обрабатывать набор результатов. Мы реализовали наш код следующим образом:
@Resource(mappedName = "jdbc/resource")
private DataSource dataSource;
Connection connection = dataSource.getConnection();
[...]
Connection conn = dataSource.getConnection();
stmt = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY, ResultSet.CONCUR_READ_ONLY);
stmt.setFetchSize(Integer.MIN_VALUE);
[...]
ResultSet rs = stmt.executeQuery(sql);
while (rs.hasNext()) {
[....]
}
В любом случае он всегда загружает все результаты в память, мы пытались использовать разные методы (useCursorFetch true и fetch size = 10 и т. Д.), Но безуспешно, у нас всегда не получается потоковый набор результатов.
"Jdbc / resource" - это тот же ресурс, который используется менеджером сущностей jpa (поэтому он работает нормально), у соединения нет "странных" опций, мы используем glassfish 4.1 для наших тестов и используем версию 5.1 коннектора /J.26 и 5.1.32.
Есть ли способ получить работающий потоковый набор результатов?