2015-05-10 175 views
1

我想在我的應用程序中使用Envers。所以,我加入到我的pom.xmlSpring Boot + Hibernate Envers。創建名稱爲'entityManagerFactory'的bean時出錯

休眠-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 

我需要做什麼額外的配置?

+1

spring.jpa.properties,你可以發表你的pom.xml?我可以知道爲什麼你不使用相同的版本的休眠enver?你的休眠版本是4.3.8對不對?不是4.38。 –

+0

沒錯。 Spring Boot爲envers提供了依賴版本。 使用依賴沒有版本工作就好了。 – Loco

回答

1

有一個Spring Data Envers項目可能會幫助這裏。作爲一項附加功能,它將允許您通過存儲庫訪問修訂版本。你只需要這個註釋在你的配置:

@EnableJpaRepositories(repositoryFactoryBeanClass = EnversRevisionRepositoryFactoryBean.class) 

而且,你的Hibernate屬性應該是下面每the docs

+0

我不知道Spring Data Envres。你有一個示例用法? –

相關問題