2011-01-29 103 views
1

在Spring中,JPA,Hibernate項目我試圖讓異常處理工作。對於下面的代碼:Spring EntityManager休眠異常處理

@Repository("mscoutService") 
    public class MScoutServiceImpl implements MScoutService, Serializable { 

     @PersistenceContext 
     private EntityManager em; 

... 
     @Override 
     @Transactional 
     public void deleteMission(Long missionId) { 
      try { 
       Mission mis = em.find(Mission.class, missionId); 
       em.remove(mis); 
      } catch (Exception e) { 
       handle_exception(); 
      } 
     } 

我試圖抓住潛在的休眠/ JDBC/DB異常(例如,當實體依賴仍然存在刪除將失敗,org.springframework.orm.hibernate3.HibernateJdbcException)並執行一些操作。但是,捕獲代碼永遠不會到達(在調試器中檢查)。

我想這與春季管理這個辦法的事,但我不知道,我只是如何em.remove()中捕捉異常......

任何幫助表示讚賞!

回答

4

這是因爲當會話被刷新時發生異常。也許它會在事務提交時被刷新 - 即通過Spring代理。如果你想手動刷新,你可以使用entityManager.flush()

+0

謝謝!添加em.flush()會導致異常處理程序被捕獲,所以這解決了我的問題。 – Tom 2011-01-29 22:12:30