в rollback-for
вы указываете имя исключения. Например, если вы хотите откат для your.pkg.NoProductInStockException
, вы пишете
rollback-for="your.pkg.NoProductInStockException"
Это приведет к откату транзакции, если она обнаружит исключение, соответствующее указанному. Если генерируется исключение, которое не совпадает, оно передается вызывающей стороне службы или помещается в TransactionRolledBackException
Документация по транзакции объясняет:
Рекомендованный способ указать инфраструктуре транзакций Spring Framework на то, что работа транзакции должна быть откатана, - вызвать исключение из кода, который в данный момент выполняется в контексте транзакции. Код инфраструктуры транзакций Spring Framework будет перехватывать любое необработанное исключение по мере того, как он будет пузыриться в стеке вызовов, и определять, отмечать ли транзакцию для отката.
В конфигурации по умолчанию код инфраструктуры транзакций Spring Framework помечает транзакцию для отката только в случае выполнения, непроверенных исключений; то есть, когда выброшенное исключение является экземпляром или подклассом RuntimeException. (Ошибки также по умолчанию приводят к откату). Проверенные исключения, которые вызываются из транзакционного метода, не приводят к откату в конфигурации по умолчанию.
Вы можете точно указать, какие типы исключений помечают транзакцию для отката, включая проверенные исключения.