Может ли базовое соединение 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.

Есть ли способ получить работающий потоковый набор результатов?

0 ответов

Другие вопросы по тегам