Разница между 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.