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?