Ответ 1
В принципе, все настройки конфигурации используются для создания экземпляра o.h.c.Settings
. Это делается с помощью метода o.h.c.SettingsFactory#buildSettings()
, который содержит следующие строки:
Integer statementFetchSize = PropertiesHelper.getInteger(Environment.STATEMENT_FETCH_SIZE, properties);
if (statementFetchSize!=null) log.info("JDBC result set fetch size: " + statementFetchSize);
settings.setJdbcFetchSize(statementFetchSize);
Итак, значение null
разрешено, оно не будет переведено и будет "распространено" как таковое.
Этот параметр затем используется в o.h.j.AbstractBatcher.java#setStatementFetchSize
:
private void setStatementFetchSize(PreparedStatement statement) throws SQLException {
Integer statementFetchSize = factory.getSettings().getJdbcFetchSize();
if ( statementFetchSize!=null ) {
statement.setFetchSize( statementFetchSize.intValue() );
}
}
Этот частный метод вызывается при подготовке PreparedStatement
или CallableStatement
. См. prepareQueryStatement
и prepareCallableQueryStatement
в AbstractBatcher
.
Итак, значение по умолчанию null
и приводит к тому, что Hibernate не вызывает Statement#setFetchSize()
.
Это фактически суммируется в справочной документации:
3.4. Дополнительные свойства конфигурации
...
hibernate.jdbc.fetch_size
: ненулевое значение определяет размер выборки JDBC (вызовыStatement.setFetchSize()
)
И вот что должен сказать javadoc о Statement#setFetchSize()
:
Дает драйвер JDBC подсказка относительно количество строк, которые нужно извлечь из базы данных, когда больше строк необходимых для объектов ResultSet этим выражением. Если значение задано ноль, тогда подсказка игнорируются. Значение по умолчанию равно нулю.
Другими словами, при использовании null
fetch_size
драйвер JDBC будет использовать значение по умолчанию ноль.