使用Jadiru Joda / Hibernate持久性用户类型时的AbstractMethodError [英] AbstractMethodError when using Jadiru Joda/Hibernate persistent user types

查看:84
本文介绍了使用Jadiru Joda / Hibernate持久性用户类型时的AbstractMethodError的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在用户的MySQL TIMESTAMP类型数据库中引入了一个已创建列。我试图使用Jadiru的UserType Hibernate映射器将其映射到Joda LocalDateTime。我使用的是UserType类的v2.0,我已经尝试了Hibernate的v3.6.0和3.6.7。我正在使用JDK 1.6。这个数据访问层被用作Spring 3 Web应用程序的一部分。



以下是我的持久化对象的相关位:

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

没什么太复杂的,但是当我的UserDAO试图查询表时,我得到以下异常 - p>

  java.lang.AbstractMethodError:org.jadira.usertype.dateandtime.joda.PersistentLocalDateTime.nullSafeGet(Ljava / SQL /结果集; [Ljava /郎/字符串; Ljava /郎/对象;)Ljava /郎/对象; 
在org.hibernate.type.CustomType.nullSafeGet(CustomType.java:109)
在org.hibernate.type.AbstractType.hydrate(AbstractType.java:104)
在org.hibernate .persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2283)
在org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1527)
在org.hibernate.loader.Loader.instanceNotYetLoaded (Loader.java:1455)
在org.hibernate.loader.Loader.getRow(Loader.java:1355)
在org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:611)
。在org.hibernate.loader.Loader.doQuery(Loader.java:829)
在org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:274)
。在org.hibernate作为。 loader.Loader.doList(Loader.java:2533)
在org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2276)
在org.hibernate.loader.Loader.list(Loader。 java:2271)
在org.hiberna te.loader.hql.QueryLoader.list(QueryLoader.java:452)
处org.hibernate.engine org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
。 query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
在org.hibernate.impl.SessionImpl.list(SessionImpl.java:1268)
在org.hibernate.impl.QueryImpl.list(QueryImpl。
at org.springframework.orm.hibernate3.HibernateTemplate $ 30.doInHibernate(HibernateTemplate.java:921)
at org.springframework.orm.hibernate3.HibernateTemplate $ 30.doInHibernate(HibernateTemplate.java: 1)
。在org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:406)
。在org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.find(HibernateTemplate.java:912)
at org.springframework.orm.hibernate3.HibernateT emplate.find(HibernateTemplate.java:908)
在com.vox.dao.UserDAO.getUser(UserDAO.java:27)
在com.vox.security.DashboardAuthenticationProcessingFilter.successfulAuthentication(DashboardAuthenticationProcessingFilter.java: 30)$在org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:218)$ b $在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy.java b b $ b:
at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:105)
at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilter(FilterChainProxy。
at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:79)
at org.springframework.security.web.FilterChainProxy $ VirtualFilterChain.doFilt ER(FilterChainProxy.java:355)维持在org.springframework.security.web.FilterChainProxy $ VirtualFilterChain org.springframework.security.web.session.ConcurrentSessionFilter.doFilter(ConcurrentSessionFilter.java:109)

。的doFilter(FilterChainProxy.java:355)
在org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:149)
在org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy的。 Java的:在org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167 237)

在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)
在org.apache.catalina.core.StandardContextValve.invoke(标准ContextValve.java:191)美元,org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127 B $ B)
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109 102)

。在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)
在org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:489)$ b $在java.lang.Thread.run(Thread.java:637)

我尝试将所有注释放在方法上而不是字段上,但是同样的问题。

我也试过映射不同的列类型,比如DATE到LocalDate和TIME到LocalTIME,但每个都给出了类似的错误。

我尝试的另一件事是使用标准查询而不是基于模板的查询。这不会影响问题。



我检查了类路径中重复的库,看起来不是这样。



我的设置显然有些问题,因为UserType文档说这应该是正常的。没有任何谷歌命中这个错误。请问有人能指出我正确的方向吗?



谢谢,

Dan

$ b

解决方案

不是一个解决方案,而是一个指针/提示: nullSafeGet 的签名看起来很奇怪。它应该是

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

但是hibernate在没有 SessionImplementor 参数的情况下调用 nullSafeGet 。因此,实际的 CustomType 类可能会定义一个抽象的 nullSafeGet 方法,该方法在实际的实现者<$ c $中没有实现c> PersistentLocalDateTime (它只是实现一个带有不同参数的方法)

也许你的joda和hibernate版本不兼容。我会再次调查这个方向。


I've introduced a "created" column to my user's database of MySQL TIMESTAMP type. I'm attempting to map this to a Joda LocalDateTime using Jadiru's UserType Hibernate mappers. I'm using v2.0 of the UserType classes and I've tried with v 3.6.0 and 3.6.7 of Hibernate. I'm using JDK 1.6. This data access layer is being used as part of a Spring 3 web application.

Here's the relevant bit of my persistence object -

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

Nothing too complicated, but I get the following exception whenever my UserDAO tries to query the table -

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)

I've tried placing all annotations on the methods instead of fields, but same issue.

I've also tried mapping different column types, like DATE to a LocalDate and TIME to a LocalTIME but each gives a similar error.

Another thing I tried was using a criteria query instead of a template based query. This didn't affect the problem.

I've checked the classpath for duplicate libraries, which there do not appear to be.

Something is clearly wrong with my setup, as the UserType documentation says this should just work. No google hits for this error whatsoever. Please can someone point me in the right direction ?

Thanks,

Dan

解决方案

Not a solution but a pointer/hint: the signature of nullSafeGet looks strange. It should be

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

but hibernate calls a nullSafeGet without the SessionImplementor parameter. So the actual CustomType class might define an abstract nullSafeGet method which isn't implemented in the actual implementor PersistentLocalDateTime (which simply implements a method with different parameters)

Maybe your versions of joda and hibernate are not compatible. I'd investigate in that direction again.

这篇关于使用Jadiru Joda / Hibernate持久性用户类型时的AbstractMethodError的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆