какой размер по умолчанию hibernate.jdbc.fetch_size? - PullRequest
12 голосов
/ 28 июля 2010

Мы знаем по умолчанию, что большинство размеров выборки драйверов jdbc равно 10.

Кто-нибудь знает, какой размер выборки по умолчанию в hibernate, а именно hibernate.jdbc.fetch_size?

Ответы [ 4 ]

7 голосов
/ 29 июля 2010

В основном все параметры конфигурации используются для создания экземпляра 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 будет использовать значение по умолчанию, равное нулю .

2 голосов
/ 29 июля 2010

По умолчанию null, то есть без настройки.Базовая реализация интерфейса Query, AbstractQueryImpl внутренне использует RowSelection для отслеживания первой строки, размера выборки и времени ожидания.Если эти значения null, то значения не установлены в базовом соединении JDBC.

2 голосов
/ 28 июля 2010

На языке JDBC размер выборки - это число строк, физически извлекаемых из базы данных драйвером JDBC за один раз при прокрутке запроса ResultSet с помощью next (). С hibernate.jdbc.fetch_size ненулевое значение определяет размер выборки JDBC, который в свою очередь вызывает java.sql.Statement.setFetchSize().

Размер выборки JDBC - это подсказка по оптимизации для драйвера базы данных; это может не привести к улучшению производительности, если используемый вами драйвер не реализует эту функцию. Если это так, это может улучшить связь между клиентом JDBC и вашей базой данных.

Подробнее см. http://java.sun.com/j2se/1.4.2/docs/api/java/sql/Statement.html#setFetchSize%28int%29.

0 голосов
/ 12 апреля 2013

Hibernate (любая реализация JPA) работает на один уровень выше драйвера JDBC, предоставляемого поставщиком БД.поэтому, если мы не указываем размер выборки в конфигурации гибернации, я предполагаю, что она должна принимать размер выборки по умолчанию, настроенный на уровне драйвера JDBC.Как Oracle - 10, DB2 - 32

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...