[英]Exception Handling with Spring's @Transactional
我正在使用Spring MVC和hibernate開發一個用於持久性的Web應用程序。 鑒於我的DAO,GenericDao有一個SessionFactory成員屬性:
@Repository
public class Dao extends GenericDao {
public void save(Object o) {
getCurrentSession().save(o);
}
}
和服務類
@Service
public class MyService {
@Autowired
Dao dao;
@Transactional
public void save(Object o) {
dao.save(o);
}
}
我想通知我的用戶是否發生持久性異常(約束,重復等)。 據我所知,@ @Transactional
注釋僅在異常冒泡並且事務管理器回滾時才有效,因此我不應該在該方法中處理異常。 我應該在哪里以及如何捕獲DAO中發生的異常,以便我可以將其直接呈現給我的用戶,或者包含在我自己的異常中?
我想使用spring的事務支持。
Spring提供了異常處理程序。
所以你可以在你的控制器中有這樣的東西來處理ConstraintViolationException
@ExceptionHandler(ConstraintViolationException.class)
public ModelAndView handleConstraintViolationException(IOException ex, Command command, HttpServletRequest request)
{
return new ModelAndView("ConstraintViolationExceptionView");
}
在追逐問題一段時間后,我通過使用異常處理程序(如另一個答案中所述)和@Transactional
注釋的rollbackFor
屬性解決了這個問題:
@Transactional(rollbackFor = Exception.class)
我的異常處理程序仍然被調用並相應地寫入響應,但事務被回滾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.