I have a simple Hello-World Spring download application with JPA and Hibernate repositories. pom.xml as follows:
... <properties> <springframework.version>1.5.1.RELEASE</springframework.version> <validation-api.version>1.1.0.Final</validation-api.version> <dbunit.version>2.5.3</dbunit.version> <usertype.core.version>6.0.1.GA</usertype.core.version> <validate.version>2.2.0</validate.version> <strman.version>0.2.0</strman.version> <reflections.version>0.9.10</reflections.version> <javax.servlet.jsp-api.version>2.3.1</javax.servlet.jsp-api.version> <rest-assured.version>3.0.1</rest-assured.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springframework.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <repositories> <repository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-milestone</id> <url>https://repo.spring.io/libs-release</url> </pluginRepository> </pluginRepositories> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jetty</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-jdk8</artifactId> </dependency> <dependency> <groupId>com.fasterxml.jackson.datatype</groupId> <artifactId>jackson-datatype-joda</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> </dependency> <dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>${validation-api.version}</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-validator</artifactId> </dependency> <dependency> <groupId>joda-time</groupId> <artifactId>joda-time</artifactId> </dependency> <dependency> <groupId>org.jadira.usertype</groupId> <artifactId>usertype.core</artifactId> <version>${usertype.core.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> <dependency> <groupId>de.weltraumschaf.commons</groupId> <artifactId>validate</artifactId> <version>${validate.version}</version> </dependency> <dependency> <groupId>com.shekhargulati</groupId> <artifactId>strman</artifactId> <version>${strman.version}</version> </dependency> <dependency> <groupId>org.reflections</groupId> <artifactId>reflections</artifactId> <version>${reflections.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>${javax.servlet.jsp-api.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <scope>provided</scope> </dependency> </dependnecies> ...
Database configuration is a fairly simple property file:
spring.datasource.driver-class-name = com.mysql.jdbc.Driver spring.datasource.url = jdbc:mysql://localhost:3306/snafu?autoReconnect=true&useSSL=false&useUnicode=true&characterEncoding=utf8 spring.datasource.username = snafu spring.datasource.password = *** spring.jpa.show-sql = false spring.jpa.hibernate.format_sql = true spring.jpa.hibernate.ddl-auto = update spring.jpa.database-platform = org.hibernate.dialect.MySQLInnoDBDialect
And DB configclass:
package org.snafu; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.jdbc.datasource.DriverManagerDataSource; import org.springframework.orm.jpa.JpaVendorAdapter; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter; import javax.sql.DataSource; import java.util.Properties; @Configuration @EnableJpaRepositories(basePackages = { "org.snafu.repo" }) public class DatabaseConfiguration { @Value("${spring.datasource.driverClassName}") private String driver = ""; @Value("${spring.datasource.url}") private String url = ""; @Value("${spring.datasource.username}") private String user = ""; @Value("${spring.datasource.password}") private String password = ""; @Value("${spring.jpa.show-sql}") private String showSql = ""; @Value("${spring.jpa.hibernate.format_sql}") private String formatSql = ""; @Value(value = "${spring.jpa.hibernate.ddl-auto}") private String ddlAuto; @Value(value = "${spring.jpa.database-platform}") private String dialect; @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory() { final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource()); em.setPackagesToScan("de.iteratec.str.iteratweet.model"); final JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter(); em.setJpaVendorAdapter(vendorAdapter); em.setJpaProperties(additionalProperties()); return em; } @Bean public DataSource dataSource() { final DriverManagerDataSource dataSource = new DriverManagerDataSource(); dataSource.setDriverClassName(driver); dataSource.setUrl(url); dataSource.setUsername(user); dataSource.setPassword(password); return dataSource; } private Properties additionalProperties() { final Properties properties = new Properties(); properties.setProperty("hibernate.hbm2ddl.auto", ddlAuto); properties.setProperty("hibernate.dialect", dialect); properties.setProperty("hibernate.naming_strategy", "org.hibernate.cfg.EJB3NamingStrategy"); return properties; } }
This worked fine with versions 1.3.x of Spring. But with any version 1.4.x or 1.5.x auto-sleep mode:
java.lang.IllegalStateException: Failed to load ApplicationContext Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/snafu/DatabaseConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map; Caused by: java.lang.NoSuchMethodError: org.hibernate.engine.spi.SessionFactoryImplementor.getProperties()Ljava/util/Map;
Obviously, there is no such method. Hibernate version configured with Spring Boot:
mvn dependency:tree | grep -i hibernate [INFO] | +- org.hibernate:hibernate-entitymanager:jar:5.0.11.Final:compile [INFO] +- org.hibernate:hibernate-core:jar:5.0.11.Final:compile [INFO] | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile [INFO] +- org.hibernate:hibernate-validator:jar:5.3.4.Final:compile
I found several Spring issues that reference this issue. They claim that it is fixed. This hotfix is not available in Spring Boot? Do I need to manually change the version of Hibernate? I am very new to Spring Download, but I thought that was the reason for using Spring Boot, for which I get a predefined set of dependencies that will work. What am I missing or doing wrong?
source share