2014-02-17 47 views
0

我正在將Hibernate 3升級到Hibernate 4.1。運行應用程序時,我得到了以下異常:nullSafe在休眠中獲取4

java.lang.AbstractMethodError 
     at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:124) 
     at org.hibernate.type.AbstractType.hydrate(AbstractType.java:106) 
     at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2701) 
     at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1541) 
     at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1473) 
     at org.hibernate.loader.Loader.getRow(Loader.java:1373) 
     at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:640) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:850) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 
     at org.hibernate.loader.Loader.loadEntity(Loader.java:2042) 
     at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:82) 
     at org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:72) 
     at org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3710) 
     at org.hibernate.event.internal.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:439) 
     at org.hibernate.event.internal.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:420) 
     at org.hibernate.event.internal.DefaultLoadEventListener.load(DefaultLoadEventListener.java:204) 
     at org.hibernate.event.internal.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:251) 
     at org.hibernate.event.internal.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:148) 
     at org.hibernate.internal.SessionImpl.fireLoad(SessionImpl.java:992) 
     at org.hibernate.internal.SessionImpl.internalLoad(SessionImpl.java:919) 
     at org.hibernate.type.EntityType.resolveIdentifier(EntityType.java:610) 
     at org.hibernate.type.EntityType.resolve(EntityType.java:438) 
     at org.hibernate.engine.internal.TwoPhaseLoad.initializeEntity(TwoPhaseLoad.java:150) 
     at org.hibernate.loader.Loader.initializeEntitiesAndCollections(Loader.java:995) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:874) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289) 
     at org.hibernate.loader.Loader.doList(Loader.java:2447) 
     at org.hibernate.loader.Loader.listUsingQueryCache(Loader.java:2292) 
     at org.hibernate.loader.Loader.list(Loader.java:2255) 
     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470) 
     at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355) 
     at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
     at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1161) 
     at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101) 
     at my.com.MyDAOImpl.findDocuments(MyDaoImpl.java:22)...... 

我明白Hibernate4在nullSafeGet()nullSafeSet()更改的參數。所以我必須使用新參數覆蓋這些方法,並且無論如何都要在自定義類型實現中忽略SessionImplementor。

findDocuments()基本上從Documents表中查詢文檔,沒有Document.hmb.xml的字段有自定義類型。我的難題是爲什麼CustomType.nullSafeGet()被稱爲?在Document.hmb.xml中,只有一個可疑人員,但目前我不確定是否將該類型更改爲「Blob」並得到相同的錯誤。

<property name="image" column="PICTURE" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"/> 

你能幫忙嗎?

回答

0

我的問題是通過將「org.springframework.orm.hibernate3.support.BlobByteArrayType」更改爲「materialized_blob」來解決的。

<property name="image" column="PICTURE" type="materialized_blob"/> 

它看起來像春天呼籲實行其Hibernate 3 CustomType.javaHibernate 4 CustomType.java衝突。從Hibernate 3升級到4時獲得的一個教訓是,blob列需要使用「materialized_blob」作爲類型,這比Hibernate 3更簡單,Spring必須在0123工作室中放入一個lobHandler

+0

如果您從Hibernate 3切換到Hibernate 4,您還應該切換到支持Hibernate 4的Spring版本,否則您可能會收到類似這樣的意外錯誤。檢查你正在使用的Spring版本的文檔。 – Jesper

+0

我也在將spring從2.5.4升級到3.2。是的,目前發生了許多意想不到的錯誤。感謝你的建議。 – user3305262