2011-01-29 4 views
1

Spring, JPA, Hibernate 프로젝트에서 나는 예외 처리 작업을 시도하고있다.Spring EntityManager 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(); 
      } 
     } 

내가 (종속 실체는 여전히 org.springframework.orm.hibernate3.HibernateJdbcException 실패합니다 제거를 제시 할 때, 예를 들어) 기본 최대 절전/JDBC/DB 예외를 잡으려고 노력하고있어 다음 코드 몇 가지 작업을 수행하십시오. 그러나 catch 코드에 도달하지 않습니다 (디버거에서 확인).

나는이 봄이를 관리하는 방식과 관련이있다 생각,하지만 난

어떤 도움에 감사드립니다 ... 내가 em.remove() 동안 예외를 잡을 수 있습니다 얼마나 몰라!

답변

4

세션이 플러시 될 때 예외가 발생하기 때문입니다. 트랜잭션이 커밋 될 때 (즉, 스프링 프록시에 의해) 플러시됩니다. 수동으로 플러시하려면 entityManager.flush()을 사용할 수 있습니다.

+0

감사합니다. em.flush()를 추가하면 예외 핸들러가 catch되므로이 문제가 해결되었습니다. – Tom

+0

이 스레드는 약간 오래된 것이지만 더 나은 방법은 @Transactional을 사용중인 저장소 위의 예외 계층을 처리하는 것입니다. 아니면 예외를 처리하는 가장 좋은 방법입니까? – oberger

+0

예, 일반적으로 저장소 외부에서하는 것이 좋습니다. – Bozho