【问题标题】:Error creating bean with name 'entityManagerFactory' :java.lang.NoSuchMethodError: javax.persistence.Table.indexes()创建名为“entityManagerFactory”的bean时出错:java.lang.NoSuchMethodError: javax.persistence.Table.indexes()
【发布时间】:2020-04-28 15:05:35
【问题描述】:

在我的一个 maven 项目中,hibernate-core 的依赖关系图如下:

    [INFO] +- org.hibernate:hibernate-core:jar:5.4.10.Final:compile
    [INFO] |  +- (org.jboss.logging:jboss-logging:jar:3.4.1.Final:compile - version managed from 3.3.2.Final; omitted for duplicate)
    [INFO] |  +- javax.persistence:javax.persistence-api:jar:2.2:compile
    +- (org.hibernate:hibernate-core:jar:5.4.10.Final:compile - omitted for duplicate)
    [INFO] | +- org.springframework.data:spring-data-jpa:jar:2.2.4.RELEASE:compile

我收到如下错误:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1796)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
    at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
    at com.salesforce.sconems.abstractions.SconeApp.run(SconeApp.java:118)
    at com.salesforce.sconems.abstractions.SconeApp.run(SconeApp.java:163)
    at com.salesforce.tm.ThreatmodelServiceService.main(ThreatmodelServiceService.java:23)
Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:1236)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:836)
    at org.hibernate.boot.model.source.internal.annotations.AnnotationMetadataSourceProcessorImpl.processEntityHierarchies(AnnotationMetadataSourceProcessorImpl.java:254)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess$1.processEntityHierarchies(MetadataBuildingProcess.java:230)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:273)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1202)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1233)
    at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:58)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378)
    at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1855)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1792)
    ... 16 common frames omitted

同样,我关注了这个帖子:Exception in thread "main" java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;NoSuchMethodError in javax.persistence.Table.indexes()[Ljavax/persistence/Index。我不知道如何解决这个问题。

【问题讨论】:

  • 类路径上是否还有其他 jpa 依赖项?或者任何其他包含类 javax.persistence.Table 的 jar?
  • 是的@GreyFairer 我有。我有 org.springframework.data:spring-data-jpa:jar:2.2.4.RELEASE:compile 和 javax.persistence:javax.persistence-api:jar:2.2:compile。我已经相应地更新了帖子。

标签: java spring hibernate jpa


【解决方案1】:

如果你遵循依赖关系,你可能会发现类似的东西:

spring-data-jpa:2.2.4.RELEASE 
-> org.hibernate:hibernate-core:5.2.17.Final(optional) 
-> org.hibernate.javax.persistence:hibernate-jpa-2.1-api:1.0.0.Final

所以这可能是较旧的 javax.persistence.Table 类。

我不确定 Spring Data 是否已为 JPA 2.2 做好准备。

如果你查看spring-data-jpa:2.2.4.RELEASE的pom.xml,它依赖于hibernate 5.2.17.Final,它们还没有更新。

所以我会坚持使用 hibernate 5.2.x 系列。

【讨论】:

  • 是的@GryFairer,我正在尝试摆脱这种依赖 org.springframework.data:spring-data-jpa:jar:2.2.4.RELEASE:compile,但我什至无法在 pom.xml 中的 hibernate-core 中放入排除块后
  • 是的,排除块很难使用。但我认为,如果您将休眠的版本降低到 5.2.17.Final 或 5.2.18.Final,则一切都应该可以在不需要排除块的情况下工作。
【解决方案2】:

我解决了这个问题。这是因为通过 Intellij 添加了 Java EE6 jar 作为外部依赖项,这是我在设置项目时完成的。一旦我删除它,它就开始工作了。谢谢。

【讨论】:

    猜你喜欢
    • 2013-06-15
    • 2020-07-12
    • 2018-02-18
    • 2015-06-19
    • 1970-01-01
    • 2019-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多