2010-12-15 15 views
4

しないのはなぜSpring 3.0.4HibernateTemplate方法Hibernate 3.3.2GAObjectNotFoundExceptionをスローした場合には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行目)を見ると、例外がログに記録されてから再スローされます。

例外スタックトレースのログがあります。ここでは、春が例外を変換していないという証拠はありません。

+0

マイケル、そうです!私は、このログメッセージを生成したのがHibernateであることに気付かなかった。私は、実際にはSpringが例外を翻訳していないことを意味するようにログエントリを誤解しました。アプリケーションがこの例外を伝播していないという事実は、Springがこの例外を正しく処理しているという点で、スタックを上に上げているはずです。 –

0

org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException()メソッドは、例外がnet.sf.hibernate.ObjectNotFoundExceptionかどうかをチェックします。つまり、UncategorizedDataAccessExceptionを投げているはずです。

これは設計上の決定であるのか、オーバーサイズであるのかわかりません(つまり、春のバグ)。

+0

Springは 'ObjectNotFoundException'を' ObjectRetrievalFailureException'に変換します。 –

関連する問題