Spring EntityManager Hibernate异常处理

时间:2011-01-29 21:27:57

标签: hibernate spring jpa

在Spring,JPA,Hibernate项目中,我正试图让异常处理工作。对于以下代码:

    @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();
            }
        }

我正在尝试捕获底层的hibernate / jdbc / db异常(例如,当依赖实体仍然存在时,remove将因org.springframework.orm.hibernate3.HibernateJdbcException而失败)并执行一些操作。但是永远不会到达catch代码(在调试器中检查)。

我想这与Spring管理它的方式有关,但我不知道如何在em.remove()期间捕获异常......

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

这是因为会话被刷新时会发生异常。并且可能在事务提交时(即通过spring代理)刷新。如果您想手动刷新,可以使用entityManager.flush()