JPA Hibernate: Справка по классическим значениям Batching Insert - PullRequest
0 голосов
/ 01 апреля 2011

Я прочитал форум / искал высоко и низко, но это не будет пакетным, как я ожидал. Короче говоря, я хочу, чтобы значения Insert во временные ряды (...), (...), (...) объединяли вставку в один оператор.

Postgres 9. Hibernate 3.4.0. JPA 1,99

Сущность не имеет отношения к другим сущностям / коллекциям, она сама по себе является версионной и использует GenerationType.SEQUENCE

Вот что говорит интернет, чтобы активировать эту функцию.

В Java, внутри моего @Transactional, я вызываю .merge для этого типа сущности и только для этого типа. Я также пытался вызвать постоянный вызов и отключить управление версиями ... не повезло ... Я отмечаю это в журналах: AbstractBatcher: - нет пакетных операторов для выполнения

Любая помощь?


Вот некоторая релевантная трассировка отладки ... уменьшена для простоты ...

2011-03-31 14: 20: 37,414 TRACE [pool-2-thread-3] AbstractSaveEventListener: - временный экземпляр: com.xxx.TimeSeriesEntity 2011-03-31 14: 20: 37,414 TRACE [pool-2-thread-3] DefaultPersistEventListener: - сохранение временного экземпляра 2011-03-31 14: 20: 37,414 DEBUG [pool-2-thread-3] AbstractSaveEventListener: - сгенерированный идентификатор: 188032722, с использованием стратегии: org.hibernate.id.SequenceHiLoGenerator 2011-03-31 14: 20: 37,414 TRACE [pool-2-thread-3] AbstractSaveEventListener: - сохранение [com.xxx.TimeSeriesEntity # 188032722] 2011-03-31 14: 20: 37,414 TRACE [pool-2-thread-3] Управление версиями: - с использованием начальной версии: 0 2011-03-31 14: 20: 37,414 TRACE [pool-2-thread-3] AbstractFlushingEventListener: - сеанс очистки 2011-03-31 14: 20: 37,414 DEBUG [pool-2-thread-3] AbstractFlushingEventListener: - обработка каскадов времени сброса // надрез

2011-03-31 14: 20: 37,414 Каскад TRACE [pool-2-thread-3]: - каскад обработки ACTION_PERSIST_ON_FLUSH для: com.xxx.TimeSeriesEntity 2011-03-31 14: 20: 37,414 Каскад TRACE [pool-2-thread-3]: - завершен каскад обработки ACTION_PERSIST_ON_FLUSH для: com.xxx.TimeSeriesEntity // надрез

2011-03-31 14: 20: 37,415 DEBUG [pool-2-thread-3] AbstractFlushingEventListener: - грязная проверка коллекций 2011-03-31 14: 20: 37,415 TRACE [pool-2-thread-3] AbstractFlushingEventListener: - Очистка сущностей и обработка ссылочных коллекций 2011-03-31 14: 20: 37,415 TRACE [pool-2-thread-3] AbstractEntityPersister: - com.xxx.TimeSeriesEntity.highestValidDataStartTime is dirty 2011-03-31 14: 20: 37,415 TRACE [pool-2-thread-3] AbstractEntityPersister: - com.xxx.TimeSeriesEntity.seriesEndTime is dirty 2011-03-31 14: 20: 37,415 TRACE [pool-2-thread-3] AbstractEntityPersister: - com.xxx.TimeSeriesEntity.seriesStartTime is dirty 2011-03-31 14: 20: 37,415 TRACE [pool-2-thread-3] DefaultFlushEntityEventListener: - Обновление объекта: [com.xxx.TimeSeriesEntity # 188032673] 2011-03-31 14: 20: 37,415 TRACE [pool-2-thread-3] Управление версиями: - Увеличение: от 0 до 1 // надрез

2011-03-31 14: 20: 37,418 TRACE [pool-2-thread-3] AbstractFlushingEventListener: - Обработка коллекций, на которые нет ссылок 2011-03-31 14: 20: 37,418 TRACE [pool-2-thread-3] AbstractFlushingEventListener: - Планирование коллекции удаляет / (повторно) создает / обновляет 2011-03-31 14: 20: 37,418 DEBUG [pool-2-thread-3] AbstractFlushingEventListener: - Сброшено: 50 вставок, 50 обновлений, 0 удалений для 50 объектов 2011-03-31 14: 20: 37,418 DEBUG [pool-2-thread-3] AbstractFlushingEventListener: - Удалено: 0 (повторных) созданий, 0 обновлений, 0 удалений в 0 коллекциях // надрез

2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] AbstractFlushingEventListener: - выполнение сброса 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] ConnectionManager: - регистрация начала сброса 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] AbstractEntityPersister: - Вставка сущности: [com.xxx.TimeSeriesEntity # 188032673] 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] AbstractEntityPersister: - Версия: 0 2011-03-31 14: 20: 37,419 DEBUG [pool-2-thread-3] AbstractBatcher: - собирается открыть PreparedStatement (open PreparedStatements: 0, глобально: 1) 2011-03-31 14: 20: 37,419 DEBUG [pool-2-thread-3] SQL: - вставить во временные ряды (calc_type, channel_id, count, data_value, granularity, high_valid_data_time, max_value, min_value, series_end_time, series_start_time, version, series_id) значения (?,?,?,?,?,?,?,?,?,?,?,?,?) 2011-03-31 14: 20: 37,419 TRACE [пул-2-нить-3] AbstractBatcher: - подготовка оператора 2011-03-31 14: 20: 37,419 TRACE [пул-2-thread-3] AbstractEntityPersister: - Обезвоживающий объект: [com.xxx.TimeSeriesEntity # 188032673] 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] LongType: - привязка '52283' кпараметр: 2 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] IntegerType: - привязка '0' к параметру: 11 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] LongType: - привязка '188032673' к параметру: 12 2011-03-31 14: 20: 37,419 TRACE [pool-2-thread-3] AbstractEntityPersister: - Вставкаg entity: [com.xxx.TimeSeriesEntity # 188032674] 2011-03-31 14: 20: 37,420 TRACE [pool-2-thread-3] AbstractEntityPersister: - Версия: 0 2011-03-31 14: 20: 37,420 DEBUG [pool-2-thread-3] AbstractBatcher: - повторное использование подготовленного оператора 2011-03-31 14: 20: 37,420 DEBUG [pool-2-thread-3] SQL: - вставка во временные ряды (calc_type, channel_id, count, data_value, granularity, самые высокие_данные_данные_времени, max_value, min_value, series_end_time, series_start_time, version, series_id) значения (?,?,?,?,?,?,?,?,?,?,?,?) // snip

2011-03-31 14: 20: 37,478 DEBUG [pool-2-thread-3] AbstractBatcher: - Выполнение размера пакета: 50 2011-03-31 14: 20: 37,506 DEBUG [pool-2-thread-3] AbstractBatcher:- нет пакетных операторов для выполнения 2011-03-31 14: 20: 37,506 DEBUG [pool-2-thread-3] AbstractBatcher: - собирается закрыть PreparedStatement (открыть PreparedStatements: 1, глобально: 2) 2011-03-31 14:20: 37,506 TRACE [пул-2-нить-3] AbstractBatcher: - заключительный оператор 2011-03-31 14: 20: 37,506 TRACE [пул-2-нить-3] ConnectionManager: - регистрация завершенного сброса 2011-03-31 14: 20: 37,506 TRACE [pool-2-thread-3] AbstractFlushingEventListener: - последующая очистка 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] VersionValue: - версия стратегии несохраненного значения НЕ УКАЗАНА 2011-03-31 14: 20: 37,507 TRACE [пул-2-нить-3] IdentifierValue: - идентификатор несохраненного значения: 0 2011-03-31 14: 20: 37,507 TRACE[pool-2-thread-3] AbstractSaveEventListener: - временный экземпляр: com.xxx.TimeSeriesEntity 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] DefaultPersistEventListener: - сохранение временного экземпляра 2011-03-31 14: 20: 37,507 DEBUG [pool-2-thread-3] AbstractSaveEventListener: - сгенерированный идентификатор: 188032723, с использованием стратегии: org.hibernate.id.SequenceHiLoGenerator 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] AbstractSaveEventListener: - сохранение [com.xxx.TimeSeriesEntity # 188032723] 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] Управление версиями: - с использованием начальной версии: 0 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] VersionValue: - версия unsСтратегия aved-value НЕ УКАЗАНА 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] IdentifierValue: - id unsaved-value: 0 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] AbstractSaveEventListener: - временный экземпляр: com.xxx.TimeSeriesEntity 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] DefaultPersistEventListener: - сохранение временного экземпляра 2011-03-31 14:20: 37,507 DEBUG [pool-2-thread-3] AbstractSaveEventListener: - сгенерированный идентификатор: 188032724, с использованием стратегии: org.hibernate.id.SequenceHiLoGenerator 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3]AbstractSaveEventListener: - сохранение [com.xxx.TimeSeriesEntity # 188032724] 2011-03-31 14: 20: 37,507 TRACE [pool-2-thread-3] Управление версиями: - с использованием начальной версии: 0 2011-03-31 14:20:37,507 TRACE [пул-2-нить-3] VersionValue: - стратегия несохраненного значения версии НЕ УКАЗАНА 2011-03-31 14: 20: 37,507 TRACE [пул-2-нить-3] IdentifierValue: - идентификатор несохраненного значения: 0

Вот инициализация фабрики сеанса:

2011-03-31 14: 16: 17,521 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] InjectedDataSourceConnectionProvider: - Использование предоставленного источника данных 2011-03-31 14: 16: 17,535 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] НастройкиФабрика: - RDBMS: PostgreSQL, версия:9.0.2 2011-03-31 14: 16: 17 535 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] НастройкиФабрика: - Драйвер JDBC: собственный драйвер PostgreSQL, версия: PostgreSQL 9.0 JDBC4 (сборка 801) 2011-03-31 14: 16: 17 560 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] Dialect: - Использование диалекта: org.hibernate.dialect.PostgreSQLDialect 2011-03-31 14: 16: 17,564 INFO [SpringOsgiExtenderThread-46] TransactionFactoryFactory: - Стратегия транзакции: org.hibernate.transaction.JDBCTransaction.JDBCTransaction31 14: 16: 17 564 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] TransactionManagerLookupFactory: - Не настроено TransactionManagerLookup (в среде JTA использование кэша второго уровня для чтения-записи или транзакции не рекомендуется) 2011-03-31 14: 16: 17 565 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] НастройкиФабрики: - Автоматизацияc сбросить во время beforeCompletion (): отключено 2011-03-31 14: 16: 17,565 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - автоматическое закрытие сеанса в конце транзакции: отключено 2011-03-31 14: 16: 17,565 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - Размер пакета JDBC: 50 2011-03-31 14: 16: 17,565 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Пакетное обновление JDBC для версионных данных: включено 2011-03-31 14: 16: 17 565 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - прокручиваемые наборы результатов: включено 2011-03-31 14: 16: 17,565 DEBUG [SpringOsgiExtenderThread-46] SettingsFactory: - обернуть наборы результатов: отключено 2011-03-31 14: 16: 17,565 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - JDBC3 getGeneratedKeys (): включено 2011-03-31 14: 16: 17 565 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - режим разъединения соединения: авто 2011-03-31 14: 16: 17 566 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46]SettingsFactory: - Размер выборки пакета по умолчанию: 1 2011-03-31 14: 16: 17 566 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Создание SQL с комментариями: отключено 2011-03-31 14: 16: 17 566 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Упорядочить обновления SQL по первичному ключу: включено 2011-03-31 14: 16: 17 566 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Заказать SQL-вставки для пакетирования: включено 2011-03-31 14: 16: 17,566 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Переводчик запросов: org.hibernate.hql.ast.ASTQueryTranslatorFactory 2011-03-31 14: 16: 17,567 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] ASTQueryTranslatorFactory: - Использование ASTQueryTranslatorFactory 2011-03-31 14: 16: 17,567 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - Замена языка запросов: {} 2011-03-31 14: 16:ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - JPA-QL строгое соответствие: включено 2011-03-31 14: 16: 17,567 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Кэш второго уровня: отключено 2011-03-31 14:16:17,567 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] НастройкиФабрика: - Кеш запросов: отключен 2011-03-3114: 16: 17,567 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - Фабрика области кэша: org.hibernate.cache.impl.NoCachingRegionFactory 2011-03-31 14: 16: 17,568 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Оптимизировать кэш для минимумаставит: отключено 2011-03-31 14: 16: 17,568 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - Структурированные записи кэша второго уровня: включено 2011-03-31 14: 16: 17,568 TRACE [SpringOsgiExtenderThread-46] SQLExceptionConverterFactory: - Использованиеопределенный диалект конвертер 2011-03-31 14: 16: 17 570 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - Статистика: отключена 2011-03-31 14: 16: 17 570 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Откат синтетического идентификатора удаленной сущности:отключено 2011-03-31 14: 16: 17 571 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SettingsFactory: - Режим объекта по умолчанию: pojo 2011-03-31 14: 16: 17 571 INFO [SpringOsgiExtenderThread-46] SettingsFactory: - Проверка именованного запроса: включена2011-03-31 14: 16: 17 589 ИНФОРМАЦИЯ [SpringOsgiExtenderThread-46] SessionFactoryImpl: - создание фабрики сеансов 2011-03-31 14: 16: 17 590 DEBUG [SpringOsgiExtenderThread-46] SessionFactoryImpl: - Фабрика сеансов, построенная с конфигурациями фильтров: {}

1 Ответ

0 голосов
/ 01 апреля 2011

Hibernate использует пакетные вставки.Это не означает, что для вставки множества сущностей используется один оператор.Это означает, что он использует Statement.addBatch() и Statement.executeBatch() для внутреннего использования.Это эффективно уменьшает количество путевых запросов к базе данных (для получения более подробных объяснений прочитайте связанный javadoc), и я очень сомневаюсь, что он менее (или значительно менее) эффективен, чем один оператор вставки.

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

...