【问题标题】:NoSuchMethodError (getMetaModel) while integration testing JPA repository with Spring BOOT使用 Spring BOOT 集成测试 JPA 存储库时出现 NoSuchMethodError (getMetaModel)
【发布时间】:2016-06-06 12:15:00
【问题描述】:

我有一个基于 Spring BOOT 的 Web 服务,它使用 Spring 数据 JPA 连接到 MySql DB。我能够毫无问题地运行和部署应用程序。

但是,当我运行集成测试用例时,随着应用程序的配置,我遇到了异常 (java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/持久性/元模型/元模型)

当扩展 JpaRepository 接口的存储库 bean 即将创建时,这将被触发。

当我检查 EntityManagerFactory 接口方法时,我确实找到了 getMetaModel() 方法。

版本

  • 弹簧:4.0
  • org.eclipse.persistence.jpa : 2.6.3
  • spring-data-jpa : 1.9.2.RELEASE

如果有人能指出根本原因或进一步的调试步骤,将会很有帮助。

++++++++++++++++++++++++++++++++++++++++++++

测试类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {ApplicationService.class, ApplicationServiceImpl.class})
@EnableTransactionManagement
@WebAppConfiguration public class IntegrationTestBase {
    @Autowired
    private ApplicationServiceImpl service;
..
}

例外

java.lang.IllegalStateException: Failed to load ApplicationContext
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)
    at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:119)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:42)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:234)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:74)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ApplicationServiceImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private de.adclear.soa.integration.repository.ApplicationRepository de.adclear.soa.integration.ApplicationServiceImpl.ApplicationRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ApplicationRepository': Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/persistence/metamodel/Metamodel;
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    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.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:133)
    at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109)
    at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
    at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
    ... 24 more
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private de.adclear.soa.integration.repository.ApplicationRepository de.adclear.soa.integration.ApplicationServiceImpl.ApplicationRepository; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ApplicationRepository': Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/persistence/metamodel/Metamodel;
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:573)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 40 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ApplicationRepository': Cannot resolve reference to bean 'jpaMappingContext' while setting bean property 'mappingContext'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/persistence/metamodel/Metamodel;
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:359)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
    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.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
    ... 42 more
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaMappingContext': Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/persistence/metamodel/Metamodel;
    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.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
    ... 55 more
Caused by: java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/persistence/metamodel/Metamodel;
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.getMetamodels(JpaMetamodelMappingContextFactoryBean.java:90)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:56)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:26)
at org.springframework.beans.factory.config.AbstractFactoryBean.afterPropertiesSet(AbstractFactoryBean.java:134)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574)
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.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:108)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1481)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
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.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1116)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:545)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
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.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:772)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:839)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:538)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:133)
at org.springframework.test.context.web.AbstractGenericWebContextLoader.loadContext(AbstractGenericWebContextLoader.java:60)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.delegateLoading(AbstractDelegatingSmartContextLoader.java:109)
at org.springframework.test.context.support.AbstractDelegatingSmartContextLoader.loadContext(AbstractDelegatingSmartContextLoader.java:261)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98)
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116)
at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:228)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:230)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:249)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:89)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:193)
at org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:283)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:173)
at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:153)
at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:128)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:203)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:155)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:103)

执行单元测试时,我记录了 Spring 配置和初始化的步骤,在这些步骤之后抛出异常 -

2016-06-06 11:35:51,840 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(ApplicationServiceConfig)
2016-06-06 11:35:58,372 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(dataSource)
2016-06-06 11:35:58,490 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$DataSourceInitializerConfiguration)
2016-06-06 11:36:00,890 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(spring.datasource.CONFIGURATION_PROPERTIES)
2016-06-06 11:36:00,941 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(dataSourceInitializer)
2016-06-06 11:36:04,189 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(jpaVendorAdapter)
2016-06-06 11:36:05,630 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(jpaDialect)
2016-06-06 11:36:09,985 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(eclipseLinkProperty)
2016-06-06 11:36:16,705 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(entityManagerFactory)
2016-06-06 11:36:17,817 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(org.springframework.context.event.internalEventListenerProcessor)
2016-06-06 11:36:17,820 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(org.springframework.context.event.internalEventListenerFactory)
2016-06-06 11:36:17,827 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(ApplicationServiceApplication)
2016-06-06 11:36:18,160 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#298a0c11)
2016-06-06 11:36:18,168 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#29c496d3)
2016-06-06 11:36:18,175 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#592e883f)
2016-06-06 11:36:18,201 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#6f672a3f)
2016-06-06 11:36:18,211 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(jpaMappingContext)

当我运行应用程序(没有测试)时,我没有遇到任何异常,以下是记录的步骤 -

2016-06-06 11:49:37,146 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(dataSource)
2016-06-06 11:49:37,152 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration$DataSourceInitializerConfiguration)
2016-06-06 11:49:37,190 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(spring.datasource.CONFIGURATION_PROPERTIES)
2016-06-06 11:49:37,196 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(dataSourceInitializer)
2016-06-06 11:49:37,211 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(jpaVendorAdapter)
2016-06-06 11:49:37,215 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(jpaDialect)
2016-06-06 11:49:37,223 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(eclipseLinkProperty)
2016-06-06 11:49:37,235 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(entityManagerFactory)
2016-06-06 11:49:38,148 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(org.springframework.context.event.internalEventListenerProcessor)
2016-06-06 11:49:38,151 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(org.springframework.context.event.internalEventListenerFactory)
2016-06-06 11:49:38,155 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(ApplicationServiceApplication)
2016-06-06 11:49:38,160 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(swaggerConfig)
2016-06-06 11:49:38,431 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#3b5eab14)
2016-06-06 11:49:38,436 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#1bcbbc70)
2016-06-06 11:49:38,441 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#2f7fd8d2)
2016-06-06 11:49:38,471 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean((inner bean)#7d7e1cb4)
2016-06-06 11:49:38,480 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(jpaMappingContext)
2016-06-06 11:49:38,534 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(ApplicationRepository)
2016-06-06 11:49:39,116 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(ApplicationServiceImpl)
2016-06-06 11:49:39,128 INFO  DebugSpringConfig:18 - postProcessBeforeInitialization: bean(referrerMappingController)

【问题讨论】:

  • @blur0224 问题类似。但是提供的解决方案现在不相关。我确实在异常指出的类中找到了方法。所以需要另一种方法来解决这个问题。
  • 链接的问题是完全相关的......您有 NoSuchMethodError ,因此您在 CLASSPATH 中有一个不合适的“persistence-api”jar 没有该方法。是的,您可能还有另一个持久性 API,但没有找到!
  • 如果只有测试显示该错误,请将您的测试依赖项与您的主要项目依赖项进行比较,并仔细查看 JPA 实体管理器。我的猜测是你会发现问题所在。

标签: spring jpa integration-testing spring-data-jpa


【解决方案1】:

进一步调查以下堆栈跟踪的特定部分:

Caused by: java.lang.NoSuchMethodError: javax.persistence.EntityManagerFactory.getMetamodel()Ljavax/persistence/metamodel/Metamodel;
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.getMetamodels(JpaMetamodelMappingContextFactoryBean.java:90)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:56)
at org.springframework.data.jpa.repository.config.JpaMetamodelMappingContextFactoryBean.createInstance(JpaMetamodelMappingContextFactoryBean.java:26)

我观察到 JpaMetamodelMappingContextFactoryBean.java 指的是一个旧版本的 javax.persistence 库,它被错误地引用了。

我从 maven 中取出了上面的库,并将这个库的依赖关系与 org.eclipse.persistence 库对齐。这有一个 EntityManagerFactory 的实现和 getMetamodel() 方法的实现。

问题就这样解决了。

【讨论】:

    【解决方案2】:

    我有两个具有不同版本(1 和 2)的 javax.persistence 库,它们是从依赖 jars(EclipseLink:2.5.2,其中包括(javax.persistence:2.1.0)和persistence-api:1.0.2 导入的。我需要做的就是将 EclipseLink 移到 pom.xml 中具有 persistence-api:1.0.2 的项目之前。在 document 中定义的依赖顺序很重要:因为 Maven 2.0.9 它是重要的声明:第一个声明获胜。

    【讨论】:

      猜你喜欢
      • 2018-06-26
      • 1970-01-01
      • 2019-01-23
      • 2018-02-19
      • 2016-08-21
      • 2015-06-24
      • 2019-05-29
      • 2017-07-02
      • 1970-01-01
      相关资源
      最近更新 更多