簡體   English   中英

使用Spring的@Transactional進行異常處理

[英]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提供了異常處理程序。

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/mvc.html#mvc-exceptionhandlers

所以你可以在你的控制器中有這樣的東西來處理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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM