How to solve AbstractMethodError in Hibernate 5?

10,547

AbstractMethodError is thrown when you have incompatibility between the jar you used to compile and the one referred while server is running the code.

http://docs.oracle.com/javase/7/docs/api/java/lang/AbstractMethodError.html

"Thrown when an application tries to call an abstract method. Normally, this error is caught by the compiler; this error can only occur at run time if the definition of some class has incompatibly changed since the currently executing method was last compiled.

It could be due to the versions of hibernate-search & hibernate-entity-manager

hibernate search seems to be using hibernate-commons-annotations 4.0.5 final

http://mvnrepository.com/artifact/org.hibernate/hibernate-search-engine/5.3.0.Final

Whereas

Hibernate entity manager seems to be using hibernate-commons-annotation-5.0.0.Final

http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.0.1.Final

Check your Dependency Hierarchy tab for pom.xml in eclipse to find out which exact jar version is being used. Use to exclude incompatible versions. usually this is done automatically by pom. You could also check your WEB-INF/lib folder to see what are jars are being downloaded.

Also I see that you are using this jar. If you are using tomcat 7 better to use this instead and have its scope "provided" because at runtime the web app refers to the tomcat servlet api jar.

<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-servlet-api</artifactId>
    <version>7.0.21</version>
    <scope>provided</scope>
    </dependency>
Share:
10,547
Mihael Zamin
Author by

Mihael Zamin

Updated on June 13, 2022

Comments

  • Mihael Zamin
    Mihael Zamin almost 2 years

    i'm trying to use the hibernate 5 in Java EE with tomcat 7, and i'm getting this error:

    java.lang.AbstractMethodError
    org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:278)
    org.hibernate.boot.internal.SessionFactoryBuilderImpl.build(SessionFactoryBuilderImpl.java:444)
    org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:802)
    org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
    javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
    controller.dao.GenericDAO.<clinit>(GenericDAO.java:28)
    com.mycompany.mazkrest.UsuarioResource.login(UsuarioResource.java:89)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)
    org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81)
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144)
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161)
    org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205)
    org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347)
    org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102)
    org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:309)
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
    org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
    org.glassfish.jersey.internal.Errors.process(Errors.java:315)
    org.glassfish.jersey.internal.Errors.process(Errors.java:297)
    org.glassfish.jersey.internal.Errors.process(Errors.java:267)
    org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
    org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:292)
    org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1139)
    org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:460)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:386)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:334)
    org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    

    I'm using JPA 2.1, I've deleted any jars of old jpa versions.

    Here is my dependencies in pom.xml:

    <dependencies>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet-core</artifactId>
            <!-- <version>${jersey.version}</version>-->
            <!-- use the following artifactId if you don't need servlet 2.x compatibility -->
            <!-- artifactId>jersey-container-servlet</artifactId -->
        </dependency>
    
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.6</version>
        </dependency>
    
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.36</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.6.1</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.1</version>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-json-provider</artifactId>
            <version>2.6.1</version>
        </dependency>
    
        <dependency>
            <groupId>com.voodoodyne.jackson.jsog</groupId>
            <artifactId>jackson-jsog</artifactId>
            <version>1.1</version>
            <scope>compile</scope>
        </dependency>
    
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.6.1</version>
        </dependency>
    
        <dependency>
            <groupId>org.glassfish.jersey.media</groupId>
            <artifactId>jersey-media-json-jackson</artifactId>
            <!--  <version>${jersey.version}</version>-->
        </dependency>
    
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-search</artifactId>
            <version>5.3.0.Final</version>
        </dependency>
    
        <dependency>
            <groupId>org.apache.lucene</groupId>
            <artifactId>lucene-core</artifactId>
            <version>5.3.0</version>
        </dependency>
    
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.1.Final</version>
        </dependency>
    
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
            <type>jar</type>
        </dependency>
    </dependencies>
    

    When i execute the code that throws the exception for the second time, i get a NoDefClassFoundError.

    The hibernate seems booting right in the log, but isn't creating the entity manager.

    How solve this?

  • Mihael Zamin
    Mihael Zamin over 8 years
    If i use the alpha version, may solve this? mvnrepository.com/artifact/org.hibernate/… i have a little fear about "test" versions, could this be a solution? And i'm using Lucene 5.3.0, the hibernate-search uses lucene 5.2.1, could this cause another conflict?
  • Mihael Zamin
    Mihael Zamin over 8 years
    Problem solved, i've changed the version of hibernate-search and lucene-core, and works. Thank You