AbstractMethodError при использовании постоянных типов пользователей Jadiru Joda / Hibernate - PullRequest
5 голосов
/ 20 сентября 2011

Я ввел «созданный» столбец в базу данных моего пользователя типа MySQL TIMESTAMP. Я пытаюсь сопоставить это с Joda LocalDateTime, используя Jadiru UserType Hibernate. Я использую v2.0 классов UserType, и я пробовал с v 3.6.0 и 3.6.7 Hibernate. Я использую JDK 1.6. Этот слой доступа к данным используется как часть веб-приложения Spring 3.

Вот соответствующий бит моего объекта персистентности -

@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 сказано, что это должно сработать. Нет ошибок Google для этой ошибки вообще. Пожалуйста, кто-нибудь может указать мне правильное направление?

Спасибо

Dan

Ответы [ 2 ]

5 голосов
/ 20 сентября 2011

Не решение, а указатель / подсказка: подпись 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не совместимыЯ бы снова расследовал в этом направлении.

1 голос
/ 19 ноября 2012

в ответ на вопрос «Какой фрагмент кода вы поместили в свой pom.xml, чтобы правильно импортировать версию 1.9?»Ренато Гама, попробуйте

<dependency>
  <groupId>org.jadira.usertype</groupId>
  <artifactId>usertype.jodatime</artifactId>
  <version>1.9.1</version>
</dependency>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...