Делаю первые шаги в попытках разобраться с транзакциями и hibernate.
Завис на этом примере:
Если мы получаем сессию (к примеру, через
getCurrentSession()
), транзакцию (
session.beginTransaction()
), проделываем модификации (
save()
), но в конце не выполняем ни
commit
, ни
rollback
, то чего ожидать после закрытия сессии? Автоматический роллбэк? Какое-то другое поведение? Как это повлияет на базу данных? На данные, что были изменены?
Нашёл ответ на
stackoverflow о том, что всё зависит от соединения, но как-то размыто. Не понятно, какие существуют гарантии, что произойдёт с данными и транзакцией, ещё и после закрытия соединения.
Возможно, действия, сделанные в закрытой сессии, как-то flush-нутся вместе с новой?
Принимаю броски тапками - в теории пока что плыву.
UPD: с
hibernate.atlassian.net: Closing a session without rollback or commit may cause the uncommitted changes to be committed.
Если принудительно закрыть первую сессию и открыть вторую, то изменения, сделаны в первой, могут комминуться или ролл-бэкнуться вместе со второй. А это уже нарушение AC
ID.
И вообще, видимо, всё зависит от БД и менеджера подключений.