Разница между hibernate.jdbc.fetch_size и стратегией пакетной выборки @BatchSize

Для проблемы N+1 запросов в Hibernate, я добавляю @BatchSize(size=20) на уровне коллекции и класса. И это работает очень хорошо, поскольку каждый раз получает 20 записей. Теперь я обнаружил, что есть hibernate.jdbc.fetch_size вариант конфигурации, который я думаю, это то же самое, что и @BatchSize аннотаций. Однако это не влияет на проблему запросов N+1, когда я настроил ее в своем проекте.

Я не прав с hibernate.jdbc.fetch_size? Что такое hibernate.jdbc.fetch_size за?

1 ответ

Решение

hibernate.jdbc.fetch_size конфигурация драйвера JDBC, и она определяет:

количество строк, выбранных, если в операторах выбора более одной строки

Hibernate использует эту конфигурацию для установки PreparedStatement.fetchSize и в соответствии с документацией JDBC:

Дает драйверу JDBC подсказку о количестве строк, которые следует извлечь из базы данных, когда для объектов ResultSet, генерируемых этим оператором, требуется больше строк. Если указанное значение равно нулю, то подсказка игнорируется. Значение по умолчанию равно нулю.

Таким образом, этот параметр является только подсказкой и позволяет драйверу JDBC извлекать выбранные строки в пакетах, чтобы минимизировать количество циклических обращений к сети базы данных.

@BatchSize является оптимизацией выборки Hibernate, и она контролирует количество генерируемых операторов SELECT.

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