![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
wertklop |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
Всем добрый день.
Имеется ситуация: метод выполняет расчеты, попутно обращаясь к БД, в результате пишет данные в разные таблицы БД посредством метода save(). Вопрос: есть ли возможность сделать так, чтобы если хотя бы одна запись в БД не прошла, то и остальные предыдущие успешные записи откатились? Подойдет ли @Transactional для метода к моей ситуации? |
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Для обращения к БД используете hibernate или что-то другое?
Это сообщение отредактировал(а) Stolzen - 4.11.2013, 19:42 |
|||
|
||||
wertklop |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 65 Регистрация: 12.9.2008 Репутация: нет Всего: нет |
да, hibernate
|
|||
|
||||
Stolzen |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1041 Регистрация: 17.10.2005 Репутация: 23 Всего: 48 |
Hibernate, если мне не изменяет память, использует паттерн UnitOfWork (там это называется Session). Т.е. все изменения, вносимые в сессию, постепенно накапливаются и попадают в базу только после коммита.
А это значит, что вы должны делать коммит только по успешному завершению сохранения всех данных. Аннотация @Transactional в спринге должна это сделать за вас, если во время выполнения не было выброшено никаких исключений. Следовательно, если по вашему мнению что-то пошло не так, выбрасывайте исключение (не помню правда нужно ли там какое-то особое исключение или любое сойдет), и спринг должен позаботиться обо всем. Это сообщение отредактировал(а) Stolzen - 4.11.2013, 20:09 |
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 1 Всего: 5 |
wertklop, подойдёт, если используешь декларативное управление транзакциями.
Метод save вызывать не надо, хибернейт сам измененные сущности обновит в базе при успешном завершении транзакции (успешное выход из метода с @Transactional). Чтоб транзакция успешно не завершилась, достаточно выкинуть любое исключение. -------------------- Таково моё общее мнение. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |