在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()期间捕获异常......
感谢任何帮助!
答案 0 :(得分:4)
这是因为会话被刷新时会发生异常。并且可能在事务提交时(即通过spring代理)刷新。如果您想手动刷新,可以使用entityManager.flush()
。