Exception Handling with Spring's @Transactional
hibernate, java, spring, spring-mvc
Solution
Spring provides Exception Handlers.
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers
So you could have something like this in your controller to handle a ConstraintViolationException
@ExceptionHandler(ConstraintViolationException.class)
public ModelAndView handleConstraintViolationException(IOException ex, Command command, HttpServletRequest request)
{
return new ModelAndView("ConstraintViolationExceptionView");
}
Problem
I'm developing a web app with Spring MVC and hibernate for persistence. Given my DAO where GenericDao has a SessionFactory member attribute: ``` @Repository public class Dao extends GenericDao { public void save(Object o) { getCurrentSession().save(o); } } ``` And a Service class ``` @Service public class MyService { @Autowired Dao dao; @Transactional public void save(Object o) { dao.save(o); } } ``` I want to inform my user if a persistence exception occurs (constraint, duplicate, etc). As far as I know, the `@Transactional` annotation only works if the exception bubbles up and the transaction manager rolls back so I shouldn't be handling the exception in that method. Where and how should I catch an exception that would've happened in the DAO so that I can present it to my user, either directly or wrapped in my own exception? I want to use spring's transaction support.