2014-02-17 4 views
0

Я обновляю Hibernate 3 до Hibernate 4.1. При запуске приложения, я ниже за исключением:nullSafeGet in Hibernate 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.java реализации внешних, который конфликтует с Hibernate 4 CustomType.java. Один из извлеченных уроков, при обновлении Hibernate 3 до 4, столбец blob должен использовать «materialized_blob» как тип, который намного проще, чем Hibernate 3, Spring должен поставить lobHandler в sessionFactory.

+0

Если вы переключитесь с Hibernate 3 на Hibernate 4, вы также должны переключиться на версию Spring, которая поддерживает Hibernate 4, в противном случае вы можете получить неожиданные ошибки, подобные этим. Проверьте документацию версии Spring, которую вы используете. – Jesper

+0

Я также обновляю весну с 2.5.4 до 3.2. Да, на данный момент происходит множество неожиданных ошибок. Спасибо за предложение yr. – user3305262