Фиксация изменения базы данных изолированно от основной транзакции - PullRequest
0 голосов
/ 29 октября 2010

Допустим, у меня есть следующий код:

public void doSomething() {
    // begin transaction

    // do stuff 1
    ...

    // update a row which must be committed now
    ...

    // do stuff 2
    ...

    // commit transaction
}

Я сохранил большой объем работы с базой данных в одном методе, чтобы упростить псевдокод.Тем не менее, в основном у меня есть ряд работ с базами данных, которые я не хочу совершать до конца.В середине транзакции, приведенной выше, мне нужно зафиксировать что-то в строке без фиксации оставшейся части транзакции.Как мне выполнить эту небольшую часть работы, не затрагивая остальную часть транзакции?

1 Ответ

2 голосов
/ 29 октября 2010

Обычно вы выполняете это, просто захватывая другое соединение и выполняя работу с другим соединением базы данных.Вам может понадобиться, а может и нет, управлять уровнями изоляции базы данных, чтобы иметь желаемую видимость.Вот как, например, Propagation.REQUIRES_NEW работает в Spring.(Отредактируйте: один отмечает, что вы пометили вопрос Hibernate. По сути, вы создаете совершенно новый сеанс / диспетчер сущностей и выполняете отдельную работу с ним. Это может привести к неожиданным результатам для состояния объекта через границы.сеанс и попытайтесь продолжать использовать его через границу в другой, который может взорваться на вас. Вы должны быть осторожны, чтобы правильно управлять им и отслеживать то, что управляется каким сеансом.)

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