【问题标题】:Spring Boot + Hibernate Envers. Error creating bean with name 'entityManagerFactory'Spring Boot + Hibernate Envers。创建名为“entityManagerFactory”的bean时出错
【发布时间】:2015-05-10 15:48:10
【问题描述】:

我想在我的应用中使用 Envers。所以我添加到我的 pom.xml 中

hibernate-envers 4.2.19.Final

我的休眠版本是 4.38

我没有做任何其他事情,尝试运行测试但失败了

Caused by: 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.NoClassDefFoundError: org/hibernate/boot/registry/classloading/internal/ClassLoaderServiceImpl$Work
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:956)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:747)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:686)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:320)
at org.springframework.boot.test.SpringApplicationContextLoader.loadContext(SpringApplicationContextLoader.java:101)
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:68)
at org.springframework.test.context.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:86)
... 28 more
Caused by: java.lang.NoClassDefFoundError: org/hibernate/boot/registry/classloading/internal/ClassLoaderServiceImpl$Work
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:49)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:343)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:318)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1633)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1570)
... 42 more
Caused by: java.lang.ClassNotFoundException: org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$Work
at java.net.URLClassLoader$1.run(URLClassLoader.java:372)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:360)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 47 more

这是我的 application.yml:

spring:
profiles: default
     spring.datasource:
driverClassName: com.mysql.jdbc.Driver
url: jdbc:mysql://localhost:3306/server?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&connectionCollation=utf8_unicode_ci&characterSetResults=UTF-8
username: root
password: 
spring.jpa:
database: MYSQL
show-sql: true
hibernate:
    ddl-auto: validate
    dialect: org.hibernate.dialect.MySQL5Dialect
    naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy

对于测试环境:

spring.datasource:
driverClassName: org.h2.Driver
url: jdbc:h2:mem:test;MODE=MySQL;INIT=CREATE SCHEMA IF NOT EXISTS \"public\"
spring.jpa:
database: H2
show-sql: true
hibernate:
    ddl-auto: validate
    dialect: org.hibernate.dialect.H2Dialect
    naming_strategy: org.hibernate.cfg.ImprovedNamingStrategy
    envers.default_schema: keyserver_audit

我需要做哪些额外的配置?

【问题讨论】:

  • 你能发布你的 pom.xml 吗?我可以知道为什么你不使用相同版本的hibernate enver吗?你的休眠版本是 4.3.8 对吗?不是 4.38。
  • 没错。 Spring Boot 为 envers 提供依赖版本。使用没有版本的依赖就可以了。

标签: java maven spring-boot hibernate-envers


【解决方案1】:

有一个Spring Data Envers 项目可能对这里有所帮助。作为附带奖励,它将允许您通过存储库访问修订。您只需要在配置中使用此注释:

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class)

此外,根据the docs,您的休眠属性应位于spring.jpa.properties 之下

【讨论】:

  • 我不知道 Spring Data Envres。你有示例用法吗?
猜你喜欢
  • 1970-01-01
  • 2021-05-10
  • 2017-05-14
  • 2017-01-09
  • 1970-01-01
  • 2018-01-25
  • 1970-01-01
  • 2018-10-27
相关资源
最近更新 更多