2011-09-20 4 views
5

私のユーザのデータベースにMySQL TIMESTAMPタイプの "created"カラムを導入しました。私はこれをJadiruのUserType Hibernateマッパーを使ってJoda LocalDateTimeにマップしようとしています。私はUserTypeクラスのv2.0を使用しています。私は、v 3.6.0および3.6.7のHibernateで試しました。私はJDK 1.6を使用しています。このデータアクセス層は、Spring 3 Webアプリケーションの一部として使用されています。抽象的なJadiru Joda/Hibernateの永続的なユーザタイプを使用した場合のエラー

ここに私の永続オブジェクトの該当ビットだ - あまりにも複雑

@Column(name = "created") 
@Type(type="org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime") 
private LocalDateTime created; 

何も、私UserDAOがテーブルを照会しようとするたび、私は次の例外を取得する -

java.lang.AbstractMethodError: org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime.nullSafeGet(Ljava/sql/ResultSet;[Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/Object; 
     at org.hibernate.type.CustomType.nullSafeGet(CustomType.java:109) 
     at org.hibernate.type.AbstractType.hydrate(AbstractType.java:104) 
     at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283) 
     at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527) 
     at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1455) 
     at org.hibernate.loader.Loader.getRow(Loader.java:1355) 
     at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611) 
     at org.hibernate.loader.Loader.doQuery(Loader.java:829) 
     at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274) 
     at org.hibernate.loader.Loader.doList(Loader.java:2533) 
     at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276) 
     at org.hibernate.loader.Loader.list(Loader.java:2271) 
     at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:452) 
     at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363) 
     at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196) 
     at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268) 
     at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102) 
     at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:921) 
     at org.springframework.orm.hibernate3.HibernateTemplate$30.doInHibernate(HibernateTemplate.java:1) 
     at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406) 
     at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374) 
     at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912) 
     at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:908) 
     at com.vox.dao.UserDAO.getUser(UserDAO.java:27) 
     at com.vox.security.DashboardAuthenticationProcessingFilter.successfulAuthentication(DashboardAuthenticationProcessingFilter.java:30) 
     at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) 
     at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) 
     at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) 
     at org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109) 
     at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:355) 
     at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149) 
     at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) 
     at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) 
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) 
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) 
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) 
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) 
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) 
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) 
     at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) 
     at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) 
     at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) 
     at java.lang.Thread.run(Thread.java:637) 

私が試しましたフィールドの代わりにすべての注釈をメソッドに配置しますが、同じ問題です。

また、DATEをLocalDateに、TIMEをLocalTimeにマッピングするなど、さまざまな種類の列をマッピングしようとしましたが、それぞれ同様のエラーが発生します。

もう1つは、テンプレートベースのクエリの代わりに条件クエリを使用していました。これは問題に影響しませんでした。

重複したライブラリのクラスパスを確認しましたが、表示されません。

私のセットアップでは、何かが明らかに間違っています。これは、UserTypeのマニュアルによれば、これはうまくいくはずです。このエラーのためのGoogleのヒットはまったくありません。誰かが正しい方向に私を向けることができますか?

おかげで、

ダン

答えて

5

ないソリューションが、ポインタ/ヒント:nullSafeGetの署名が奇妙に見えます。それは

public T nullSafeGet(ResultSet resultSet, 
       String[] strings, 
       org.hibernate.engine.spi.SessionImplementor session, 
       Object object) 
      throws SQLException 

する必要がありますが、HibernateはSessionImplementorパラメータなしでnullSafeGetを呼び出します。だから、実際のCustomTypeクラスは、(単に異なるパラメータを持つメソッドを実装します)実際の実装PersistentLocalDateTimeジョダの

たぶんあなたのバージョンで実装されていない抽象nullSafeGetメソッドを定義し、休止状態かもしれない互換性がありません。私はその方向でもう一度調査します。

+2

Andreas、ありがとうございます。私が使っていたUserTypeのバージョン(2.0)は、リリースノートのHibernate 4と互換性があるとしてリストされています。このライブラリのバージョン1.9を使用すると例外がなくなります。このライブラリは、Hibernate 3.6で最後にサポートされているリリースです。 – danw

+0

ありがとう!同じ問題がありました。これは多くの時間を節約するのに役立ちました。 –

+0

こんにちは! 1.9バージョンを正しくインポートするには、pom.xmlの中にどのようなコードを挿入しましたか? – renatoargh

1

「どのようなコードをpom.xmlに入れて1.9バージョンを正しくインポートしましたか」 Renato Gama、try

<dependency> 
    <groupId>org.jadira.usertype</groupId> 
    <artifactId>usertype.jodatime</artifactId> 
    <version>1.9.1</version> 
</dependency> 
関連する問題