1

I'm stuck with this problem during startup in my Spring Boot application.

The outcome is this:

WARN 8532 --- [ main] o.h.s.a.i.LuceneEmbeddedAnalyzerStrategy : HSEARCH000075: Configuration setting hibernate.search.lucene_version was not specified: using LUCENE_CURRENT. WARN 8532 --- [ main] ationConfigEmbeddedWebApplicationContext : Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with > name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: > org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties; INFO 8532 --- [ main] o.apache.catalina.core.StandardService : Stopping service [Tomcat] INFO 8532 --- [ main] utoConfigurationReportLoggingInitializer :

Error starting ApplicationContext. To display the auto-configuration report re-run your application with 'debug' enabled. ERROR 8532 --- [ main] o.s.boot.SpringApplication : Application startup failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaAutoConfiguration.class]: Invocation of > init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1078) ~[spring-context-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:857) ~[spring-context-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122) ~[spring-boot-1.5.4.RELEASE.jar!/:1.5.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693) [spring-boot-1.5.4.RELEASE.jar!/:1.5.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360) [spring-boot-1.5.4.RELEASE.jar!/:1.5.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:303) [spring-boot-1.5.4.RELEASE.jar!/:1.5.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1118) [spring-boot-1.5.4.RELEASE.jar!/:1.5.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1107) [spring-boot-1.5.4.RELEASE.jar!/:1.5.4.RELEASE] at com.closdeal.restService.RestServiceApplication.main(RestServiceApplication.java:20) [classes!/:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_144] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_144] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_144] at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_144] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [closdeal-rest-service-1.0.2.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [closdeal-rest-service-1.0.2.jar:na] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [closdeal-rest-service-1.0.2.jar:na] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [closdeal-rest-service-1.0.2.jar:na] Caused by: java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Properties; at org.hibernate.jpa.internal.EntityManagerFactoryImpl.(EntityManagerFactoryImpl.java:124) ~[hibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final] at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:890) ~[hibernate-entitymanager-5.0.12.Final.jar!/:5.0.12.Final] at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60) ~[spring-orm-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:353) ~[spring-orm-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:370) ~[spring-orm-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:359) ~[spring-orm-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1687) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1624) ~[spring-beans-4.3.9.RELEASE.jar!/:4.3.9.RELEASE] ... 24 common frames omitted

These are the dependencies declared in build.gradle:

dependencies {
    //Spring
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.5.7.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-rest', version: '1.5.7.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '1.5.7.RELEASE'
    compile group: 'org.springframework.security', name: 'spring-security-data', version: '4.2.3.RELEASE'
    compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2', version: '2.1.1.RELEASE'
    compile group: 'org.springframework.data', name: 'spring-data-rest-hal-browser', version: '3.0.0.RELEASE'

    //Hibernate
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.2.11.Final'
    compile group: 'org.hibernate', name: 'hibernate-spatial', version: '5.2.11.Final'
    compile group: 'org.hibernate', name: 'hibernate-search-orm', version: '5.8.1.Final'
//    compile group: 'org.hibernate.javax.persistence', name: 'hibernate-jpa-2.1-api', version: '1.0.0.Final'

    //JSON
    compile("org.codehaus.jackson:jackson-mapper-asl")

    //Bases de datos
    compile("com.h2database:h2")
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.7-dmr'

    //Utilerías varias
    compile group: 'commons-io', name: 'commons-io', version: '2.5'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.6'
    compile group: 'org.apache.commons', name: 'commons-text', version: '1.1'
    compile group: 'commons-codec', name: 'commons-codec', version: '1.10'
    compile group: 'commons-validator', name: 'commons-validator', version: '1.6'
    compile group: 'net.glxn', name: 'qrgen', version: '1.4'
    compile group: 'com.vividsolutions', name: 'jts', version: '1.13'


    //Test
    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0")
    testCompile("org.junit.platform:junit-platform-runner:1.0.0")

    testCompile('org.springframework.boot:spring-boot-starter-test')
}

When I've checked the signature of the getProperties method of EntityManagerFactory class (into hibernate-jpa-2.1-api-1.0.0.Final.jar) is this:

public Map<String, Object> getProperties();

I don't know why expects this method to return a Properties object instead a map. This jar is quite old (from 2013 remains unchanged); and it seems there's no other jar which declares the EntityManagerFactory class into the classpath. I've checked other questions similar to this, and they all point to a duplicate of this class into classpath, but it seems this is not the problem here.

Thanks a lot in advance.

-- UPDATE: I've changed the gradle dependencies adding the dependencyManagement section and editing the dependencies according to Guillaume's suggestion:

dependencyManagement {
    imports {
        mavenBom 'org.springframework.boot:spring-boot-dependencies:1.5.8.RELEASE'
    }
}

dependencies {
    //Spring
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-rest'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa'
    compile group: 'org.springframework.security', name: 'spring-security-data'
    compile group: 'org.springframework.security.oauth', name: 'spring-security-oauth2'
    compile group: 'org.springframework.data', name: 'spring-data-rest-hal-browser'

    //Hibernate
    compile group: 'org.hibernate', name: 'hibernate-core', version: '5.1.10.Final'
    compile group: 'org.hibernate', name: 'hibernate-spatial', version: '5.1.10.Final'
    compile group: 'org.hibernate', name: 'hibernate-search', version: '5.6.3.Final'
    compile group: 'org.hibernate', name: 'hibernate-search-engine', version: '5.6.3.Final'
    compile group: 'org.hibernate', name: 'hibernate-search-orm', version: '5.6.3.Final'

    //JSON
    compile("org.codehaus.jackson:jackson-mapper-asl")

    //Bases de datos
    compile("com.h2database:h2")
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.7-dmr'

    //Utilerías varias
    compile group: 'commons-io', name: 'commons-io', version: '2.5'
    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.6'
    compile group: 'org.apache.commons', name: 'commons-text', version: '1.1'
    compile group: 'commons-codec', name: 'commons-codec', version: '1.10'
    compile group: 'commons-validator', name: 'commons-validator', version: '1.6'
    compile group: 'net.glxn', name: 'qrgen', version: '1.4'
    compile group: 'com.vividsolutions', name: 'jts', version: '1.13'


    //Test
    testCompile("org.junit.jupiter:junit-jupiter-api:5.0.0")
    testRuntime("org.junit.jupiter:junit-jupiter-engine:5.0.0")
    testCompile("org.junit.platform:junit-platform-runner:1.0.0")

    testCompile('org.springframework.boot:spring-boot-starter-test')
}

It seems to work properly. I'll check it and confirm it later.

2 Answers 2

2

AFAICS Spring Boot is still based on Hibernate ORM 5.0.x. See https://repo1.maven.org/maven2/org/springframework/boot/spring-boot-dependencies/1.5.7.RELEASE/spring-boot-dependencies-1.5.7.RELEASE.pom .

This explains why you have this error.

It might work with Hibernate ORM 5.1 too but 5.2 changes a lot of things.

So you should downgrade ORM to either the latest 5.0.x or try 5.1.x (at your own risk) and also downgrade Hibernate Search to the latest 5.6.x.

Sign up to request clarification or add additional context in comments.

1 Comment

Guillaume, it seems to be that the problem! Check out the main question where I've explained in detail what I did based on your suggestion. Thanks a lot!!!
0

Spring Boot 1.5 does work with Hibernate ORM 5.2 / search 5.8, but you have to override all the dependencies. I suspect you only overrode some of them in your original configuration, and propbably had multiple versions of Hibernate ORM in your classpath.

I don't know how to do it with Gradle, but with Maven you have to override the hibernate.version property.

Here is an example with Maven, if that helps:

https://github.com/hibernate/hibernate-demos/blob/master/hibernate-search/hsearch-elasticsearch-wikipedia/pom.xml#L28

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.