2010-12-15 2 views
4

하지 않는 이유는 Spring 3.0.4HibernateTemplate 방법 Hibernate 3.3.2GAObjectNotFoundException를 throw하는 경우에 load() 던져 DataAccessException 또는 더 구체적으로, ObjectRetrievalFailureException?Hibernate가 ObjectNotFoundException을 던지면 Spring이 DataAccessException을 던지지 않는 이유는 무엇입니까?

2010-12-15 13:16:03,939 133247782 [[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] INFO org.hibernate.event.def.DefaultLoadEventListener - Error performing load command 
org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.db.spgit.abstrack.model.ConsUsCustomMark#78445AAD8] 
    at org.hibernate.impl.SessionFactoryImpl$1.handleEntityNotFound(SessionFactoryImpl.java:375) ~[hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:145) ~[hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:179) ~[hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:103) ~[hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:878) [hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.hibernate.impl.SessionImpl.load(SessionImpl.java:795) [hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.hibernate.impl.SessionImpl.load(SessionImpl.java:788) [hibernate-3.2.1.ga.jar:3.2.1.ga] 
    at org.springframework.orm.hibernate3.HibernateTemplate$3.doInHibernate(HibernateTemplate.java:558) [spring-orm-3.0.4.RELEASE.jar:3.0.4.RELEASE] 
    at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) [spring-orm-3.0.4.RELEASE.jar:3.0.4.RELEASE] 
    at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) [spring-orm-3.0.4.RELEASE.jar:3.0.4.RELEASE] 
    at org.springframework.orm.hibernate3.HibernateTemplate.load(HibernateTemplate.java:551) [spring-orm-3.0.4.RELEASE.jar:3.0.4.RELEASE] 
    at org.springframework.orm.hibernate3.HibernateTemplate.load(HibernateTemplate.java:545) [spring-orm-3.0.4.RELEASE.jar:3.0.4.RELEASE] 

답변

4

예외가 기록되고있는, 반드시 던져 없습니다. 당신이 볼 수있는 것은 예외 스택 추적의 정보 수준에 대한 로그이며, 최대 절전 모드로 수행됩니다. DefaultLoadEventListener의 소스 코드 (소스 134 버전의 134 행)를 살펴보면 예외가 기록 된 다음 다시 게시된다는 것을 알 수 있습니다.

여기서 볼 수있는 것은 예외 스택 추적의 로그입니다. 스프링이 예외를 변형시키지 않는다는 증거는 없습니다.

+0

마이클, 네 말이 맞아! 나는이 로그 메시지를 생성 한 것이 Hibernate라는 것을 알지 못했다. 나는 로그 항목을 오해하여 Spring이 예외를 실제로 번역하지 않았 음을 의미합니다. 사실이 애플리케이션이이 예외를 전파하지 않았다면 스택은이 예외를 올바르게 처리했기 때문에 스택을 위로 올려야한다. –

0

org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException() 메서드는 예외가 net.sf.hibernate.ObjectNotFoundException인지 확인합니다. 즉, UncategorizedDataAccessException을 던져야합니다.

이것이 디자인 결정인지 또는 과사용 (예 : 봄의 버그)인지 알 수 없습니다.

+0

Spring은'ObjectNotFoundException'을'ObjectRetrievalFailureException'으로 변환합니다. –

관련 문제