【问题标题】:AbstractMethodError when using Jadiru Joda/Hibernate persistent user types使用 Jadiru Joda/Hibernate 持久用户类型时的 AbstractMethodError
【发布时间】:2011-09-20 08:26:33
【问题描述】:

我已经在我的 MySQL TIMESTAMP 类型的用户数据库中引入了一个“created”列。我正在尝试使用 Jadiru 的 UserType Hibernate 映射器将其映射到 Joda LocalDateTime。我正在使用 UserType 类的 v2.0,并且我尝试过使用 Hibernate 的 v 3.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 尝试查询表时,我都会收到以下异常 -

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,但每个都给出了类似的错误。

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

我已经检查了重复库的类路径,但似乎没有。

我的设置显然有问题,因为 UserType 文档说这应该可以正常工作。没有谷歌点击这个错误。请有人指出我正确的方向吗?

谢谢,

【问题讨论】:

    标签: java mysql hibernate


    【解决方案1】:

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

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

    但是hibernate调用nullSafeGet没有SessionImplementor参数。所以实际的CustomType 类可能会定义一个抽象的nullSafeGet 方法,它在实际的实现者PersistentLocalDateTime 中没有实现(它只是实现了一个具有不同参数的方法)

    也许您的 joda 和 hibernate 版本不兼容。我会再朝那个方向调查。

    【讨论】:

    • 安德烈亚斯,谢谢您的回答。你是正确的 - 我使用的 UserType 版本 (2.0) 在发行说明中被列为与 Hibernate 4 兼容。当我使用这个库的 1.9 版时,异常消失了,这似乎是 Hibernate 3.6 的最后支持版本。
    • 谢谢!有同样的问题。这有助于节省大量时间。
    • 嗨!为了正确导入 1.9 版本,您在 pom.xml 中放了哪些代码?
    【解决方案2】:

    回复“为了正确导入 1.9 版本,您在 pom.xml 中放入了哪些代码?”通过雷纳托伽马,尝试

    <dependency>
      <groupId>org.jadira.usertype</groupId>
      <artifactId>usertype.jodatime</artifactId>
      <version>1.9.1</version>
    </dependency>
    

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2010-09-24
      • 2011-09-11
      • 2014-07-12
      • 1970-01-01
      • 1970-01-01
      • 2010-12-28
      • 2012-04-09
      • 2011-01-12
      相关资源
      最近更新 更多