原因:java.lang.NoSuchMethodError:org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;II)V-在Spring REST示例中
我正在研究Spring RESTFul资源的示例。我已从链接中获取了一个引用:。在本例中,我只更新了下面显示的原因:java.lang.NoSuchMethodError:org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;II)V-在Spring REST示例中,java,spring-data-jpa,spring-restcontroller,spring-rest,Java,Spring Data Jpa,Spring Restcontroller,Spring Rest,我正在研究Spring RESTFul资源的示例。我已从链接中获取了一个引用:。在本例中,我只更新了下面显示的pom.xml中的依赖项,并重命名包名以使其更有意义。当我试图在tomcatapache-tomcat-8.0.36上部署代码时。我看到了下面的错误,在解决这个错误时,我真的筋疲力尽了。请导游 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'localConta
pom.xml
中的依赖项,并重命名包名以使其更有意义。当我试图在tomcatapache-tomcat-8.0.36
上部署代码时。我看到了下面的错误,在解决这个错误时,我真的筋疲力尽了。请导游
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'localContainerEntityManagerFactoryBean' defined in com.habuma.books.config.JpaConfiguration: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;II)V
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1076)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:851)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:444)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:326)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4842)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5303)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1407)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1397)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.NoSuchMethodError: org.hibernate.internal.CoreMessageLogger.debugf(Ljava/lang/String;II)V
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:94)
at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:848)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:876)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:60)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:338)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:373)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:362)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
... 21 common frames omitted
Sep 06, 2016 12:12:11 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
更新后的pom.xml
<properties>
<!-- General -->
<java-version>1.8</java-version>
<!-- Spring -->
<org.springframework-version>4.3.1.RELEASE</org.springframework-version>
<!-- HATEOAS -->
<spring-hateoas-version>0.21.0.RELEASE</spring-hateoas-version>
<!-- Hibernate Entity Manager -->
<hibernate-entitymanager-version>5.1.0.Final</hibernate-entitymanager-version>
<!-- Spring Data JPA -->
<spring-data-jpa-version>1.9.0.RELEASE</spring-data-jpa-version>
<!-- Validation API -->
<validation-api-version>1.1.0.Final</validation-api-version>
<!-- Hibernate Validator -->
<hibernate-validator-version>5.1.0.Final</hibernate-validator-version>
<!-- Jackson -->
<jackson.version>2.8.2</jackson.version>
<!-- AspectJ -->
<org.aspectj-version>1.8.9</org.aspectj-version>
<logback.version>1.1.7</logback.version>
<jcl-over-slf4j.version>1.7.21</jcl-over-slf4j.version>
</properties>
<dependencies>
<!-- Spring Web, WebMVC -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Spring OXM -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- Spring HATEOAS -->
<dependency>
<groupId>org.springframework.hateoas</groupId>
<artifactId>spring-hateoas</artifactId>
<version>${spring-hateoas-version}</version>
</dependency>
<!-- Spring Data JPA -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>${spring-data-jpa-version}</version>
</dependency>
<!-- Hibernate Validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator-version}</version>
</dependency>
<!-- Hibernate Entity Manager -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate-entitymanager-version}</version>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
<version>${validation-api-version}</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.156</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.2.2</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Jackson Core, DataBind, Annotations -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<!-- logging, slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${jcl-over-slf4j.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
</dependencies>
1.8
4.3.1.1发布
0.21.0.1版本
5.1.0.1最终版本
1.9.0.1发布
1.1.0.1最终版本
5.1.0.1最终版本
2.8.2
1.8.9
1.1.7
1.7.21
org.springframework
弹簧网
${org.springframework版本}
org.springframework
SpringWebMVC
${org.springframework版本}
org.springframework
春季甲虫
${org.springframework版本}
org.springframework.hateoas
春风
${spring hateoas版本}
org.springframework.data
spring数据jpa
${spring数据jpa版本}
org.hibernate
休眠验证器
${hibernate验证程序版本}
org.hibernate
休眠实体管理器
${hibernate entitymanager版本}
javax.validation
验证api
${验证api版本}
com.h2数据库
氢
1.3.156
公共dbcp
公共dbcp
1.2.2
org.aspectj
aspectjrt
${org.aspectj版本}
com.fasterxml.jackson.core
杰克逊核心
${jackson.version}
com.fasterxml.jackson.core
杰克逊数据绑定
${jackson.version}
com.fasterxml.jackson.core
杰克逊注释
${jackson.version}
org.slf4j
jcl-over-slf4j
${jcl-over-slf4j.version}
回写
回归经典
${logback.version}
javax.inject
javax.inject
1.
javax.servlet
javax.servlet-api
3.1.0
javax.servlet.jsp
jsp api
2.1
假如
javax.servlet
jstl
1.2
朱尼特
朱尼特
4.12
测试
代码的其他文件保持不变。请导游。
JpaConfiguration.java
@Configuration
public class JpaConfiguration {
@Value("#{dataSource}")
private javax.sql.DataSource dataSource;
@Bean
public Map<String, Object> jpaProperties() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("hibernate.dialect", H2Dialect.class.getName());
// props.put("hibernate.cache.provider_class", HashtableCacheProvider.class.getName());
return props;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false);
hibernateJpaVendorAdapter.setGenerateDdl(true);
hibernateJpaVendorAdapter.setDatabase(Database.H2);
return hibernateJpaVendorAdapter;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager( localContainerEntityManagerFactoryBean().getObject() );
}
@Bean
public LocalContainerEntityManagerFactoryBean localContainerEntityManagerFactoryBean() {
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(this.dataSource);
lef.setJpaPropertyMap(this.jpaProperties());
lef.setJpaVendorAdapter(this.jpaVendorAdapter());
return lef;
}
}
@配置
公共类JPA配置{
@值(“#{dataSource}”)
私有javax.sql.DataSource数据源;
@豆子
公共地图JPAPProperties(){
Map props=newhashmap();
put(“hibernate.dialogue”,h2dialogue.class.getName());
//put(“hibernate.cache.provider_class”,HashtableCacheProvider.class.getName());
返回道具;
}
@豆子
公共JpaVendorAdapter JpaVendorAdapter(){
hibernatejbavendorapter hibernatejbavendorapter=新的hibernatejbavendorapter();
hibernatejbavendorapter.setShowSql(false);
HibernateJavaEndorapter.setGenerateDdl(真);
setDatabase(Database.H2);
返回HibernateJavaEndorapter;
}
@豆子
公共平台transactionManager transactionManager(){
返回新的JpaTransactionManager(localContainerEntityManagerFactoryBean().getObject());
}
@豆子
公共LocalContainerEntityManagerFactoryBean LocalContainerEntityManagerFactoryBean(){
LocalContainerEntityManagerFactoryBean lef=新的LocalContainerEntityManagerFactoryBean();
lef.setDataSource(this.dataSource);
lef.setjpapropertypap(this.jpaProperties());
lef.setJpaVendorAdapter(this.jpaVendorAdapter());
返回lef;
}
}
我能够解决这个问题。我只是从前面提到的位置获取了这个块中显示的pom.xml和代码。在我看来,有两个问题:
1) 要解决此问题,必须使用5.1.1.Final
或最新版本
2) 另外,LocalContainerEntityManagerFactoryBean
也有问题。您肯定会得到由以下原因引起的错误:org.springframework.beans.factory.NoSuchBeanDefinitionException:未定义名为“entityManagerFactory”的bean
。现在来解决这个问题。您必须使用以下代码:
JpaConfiguration.java
@Configuration
public class JpaConfiguration {
@Value("#{dataSource}")
private javax.sql.DataSource dataSource;
@Bean
public Map<String, Object> jpaProperties() {
Map<String, Object> props = new HashMap<String, Object>();
props.put("hibernate.dialect", H2Dialect.class.getName());
// props.put("hibernate.cache.provider_class", HashtableCacheProvider.class.getName());
return props;
}
@Bean
public JpaVendorAdapter jpaVendorAdapter() {
HibernateJpaVendorAdapter hibernateJpaVendorAdapter = new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setShowSql(false);
hibernateJpaVendorAdapter.setGenerateDdl(true);
hibernateJpaVendorAdapter.setDatabase(Database.H2);
return hibernateJpaVendorAdapter;
}
@Bean
public PlatformTransactionManager transactionManager() {
return new JpaTransactionManager(entityManagerFactory().getObject() );
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory() {
LocalContainerEntityManagerFactoryBean lef = new LocalContainerEntityManagerFactoryBean();
lef.setDataSource(this.dataSource);
lef.setJpaPropertyMap(this.jpaProperties());
lef.setJpaVendorAdapter(this.jpaVendorAdapter());
return lef;
}
}
@配置
公共类JPA配置{
@值(“#{dataSource}”)
私有javax.sql.DataSource数据源;
@豆子
公共地图JPAPProperties(){
Map props=newhashmap();
put(“hibernate.dialogue”,h2dialogue.class.getName());
//put(“hibernate.cache.provider_class”,HashtableCacheProvider.class.getName());
返回道具;
}
@豆子
公共JpaVendorAdapter JpaVendorAdapter(){
hibernatejbavendorapter hibernatejbavendorapter=新的hibernatejbavendorapter();
hibernatejbavendorapter.setShowSql(false);
HibernateJavaEndorapter.setGenerateDdl(真);
setDatabase(Database.H2);