Best practices for rolling back transactions in Spring 3/Hibernate

Referencing Spring documentation:

Any RuntimeException will trigger rollback, and any checked Exception will not

Referencing javapractices.com

Unchecked exceptions :

  • represent defects in the program (bugs) - often invalid arguments передается не частному методу. Чтобы цитата из The Java Programming Язык, Гослинг, Арнольд и Холмс: "Непроверенные исключения времени выполнения. представляют собой условия, которые обычно говоря, отражайте ошибки в своем логика программы и не может быть разумно восстановлен из при запуске time. "
  • являются подклассами RuntimeException и обычно реализуются используя IllegalArgumentException, NullPointerException, или IllegalStateException
  • метод не обязан устанавливать политику для непроверенных исключений вызывается его реализацией (а они почти всегда этого не делают)

Проверенные исключения:

  • представляют недопустимые условия в областях, находящихся вне непосредственного контроля программа (неверный ввод пользователя, проблемы с базой данных, сбои в сети, отсутствуют файлы)
  • являются подклассами Exception
  • метод должен установить политику для всех проверенных исключений выброшенный его реализацией (либо передать проверенное исключение дальше the stack, or handle it somehow)

If during my business logic I discover a problem and I want to rollback the changes, I have to throw a new RuntimeException? It's not really a RuntimeException (unchecked exception) since I've identified it in the logic. Or perhaps I'm misunderstanding these concepts?

My real question, what's best practices for rolling back a transaction in my @Transactional service methods?

19
задан Corey 9 December 2010 в 19:56
поделиться