Как использовать Hibernate сессий? - PullRequest
3 голосов
/ 10 мая 2011

Структура моей программы выглядит следующим образом:

Внутри моего основного класса Java:

for () // this will execute for say 5000 times ---- LINE 1
{
    // do select on Database1 (this will select say 10000 rows) ---- LINE 2

    // do some computations (mainly string operations) ---- LINE 3

    call function1() // this will do some update on Database1 ---- LINE 4
}

Теперь я пытаюсь получить доступ к базе данных Database1 с помощью Hibernate.У меня вопрос, как мне использовать Hibernate сессии для доступа к нему.Я знаю, когда начинать сеанс и когда его заканчивать?

Если я запускаю его перед циклом for (), могу ли я передать тот же сеанс функции1 (), когда он обращается к той же базе данных?Или когда я делаю выбор (ЛИНИЯ 1), я должен закрыть его и открыть новый сеанс в функции function1 ()?Моя главная задача - оптимизировать общую производительность и минимизировать общее время выполнения.

Я новичок в Hibernate.Поэтому, пожалуйста, извините меня, если я задаю очень глупое сомнение.

Ответы [ 3 ]

5 голосов
/ 10 мая 2011

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

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

1 голос
/ 10 мая 2011

Если вы выбираете захватывать 10 000 записей, которые различаются между итерациями, вы можете получить 50 миллионов объектов в сеансе Hibernate, если вы используете один и тот же сеанс для всей операции.

Возможно, вы захотите по крайней мереочистить и очистить сеанс после каждой итерации.

1 голос
/ 10 мая 2011

сеансы абстрагируют соединения db, и для вашего примера не рекомендуется создавать сеанс для каждого шага итерации, это накладные расходы.Вместо этого откройте новый сеанс или получите существующий с помощью getCurrentSession (). Более того, по-прежнему рекомендуется использовать пулы соединений, такие как C3P0, для управления соединениями с базой данных.Установить соединение с БД дорого.

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