2011-01-29 102 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