5 Stimmen

AbstractMethodError bei der Verwendung von Jadiru Joda/Hibernate persistenter Benutzertypen

Ich habe eine "created"-Spalte in der Benutzerdatenbank meines MySQL-TIMESTAMP-Typs hinzugefügt. Ich versuche, dies auf eine Joda LocalDateTime mit Jadiru's UserType Hibernate-Mappern abzubilden. Ich verwende die UserType-Klassen Version 2.0 und habe es mit Version 3.6.0 und 3.6.7 von Hibernate versucht. Ich verwende JDK 1.6. Diese Datenschnittstelle wird als Teil einer Spring 3-Webanwendung verwendet.

Hier ist der relevante Teil meines Persistenzobjekts -

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

Nichts zu kompliziert, aber ich erhalte die folgende Ausnahme, wenn meine UserDAO versucht, die Tabelle abzufragen -

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

Ich habe versucht, alle Annotationen auf den Methoden anstelle von Feldern zu platzieren, aber das gleiche Problem.

Ich habe auch versucht, verschiedene Spaltentypen abzubilden, wie DATE auf ein LocalDate und TIME auf ein LocalTIME, aber jedes gibt einen ähnlichen Fehler.

Eine weitere Sache, die ich versucht habe, war die Verwendung einer Kriterienabfrage anstelle einer auf Vorlagen basierenden Abfrage. Dies hat das Problem nicht beeinflusst.

Ich habe den Klassenpfad auf doppelte Bibliotheken überprüft, von denen es keine zu geben scheint.

Etwas stimmt offensichtlich nicht mit meiner Konfiguration, da die UserType-Dokumentation sagt, dass dies einfach funktionieren sollte. Keine Google-Treffer für diesen Fehler überhaupt. Bitte kann mir jemand den richtigen Weg weisen?

Danke,

Dan

5voto

Andreas Dolk Punkte 110776

Keine Lösung, sondern ein Hinweis/Pointer: Die Signatur von nullSafeGet sieht seltsam aus. Es sollte sein

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

aber Hibernate ruft ein nullSafeGet ohne den SessionImplementor-Parameter auf. Daher könnte die tatsächliche CustomType-Klasse eine abstrakte nullSafeGet-Methode definieren, die nicht im tatsächlichen Implementor PersistentLocalDateTime implementiert ist (der einfach eine Methode mit anderen Parametern implementiert)

Vielleicht sind Ihre Versionen von Joda und Hibernate nicht kompatibel. Ich würde in diese Richtung erneut untersuchen.

1voto

Tilman Kolks Punkte 21

In Antwort auf "Welchen Code haben Sie in Ihrer pom.xml Datei eingefügt, um die Version 1.9 korrekt zu importieren?" von Renato Gama, versuchen Sie es mit

  org.jadira.usertype
  usertype.jodatime
  1.9.1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X