java - 创建名为 'entityManagerFactory' :java. lang.NoSuchMethodError : javax. persistence.Table.indexes() 的 bean 时出错

标签 java spring hibernate jpa

在我的一个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 。我没有得到任何关于如何解决这个问题的线索。

最佳答案

如果您遵循依赖关系,您可能会发现类似以下内容:

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。

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

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

关于java - 创建名为 'entityManagerFactory' :java. lang.NoSuchMethodError : javax. persistence.Table.indexes() 的 bean 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61483491/

相关文章:

java - 创建一个通用方法来组合多个 .close() 连接方法

java - Android 的样式 editText

java - 大型哑数据对象的最佳实践?

java - 在独立 tomcat 上使用 Spring Boot 开发我的 REST 应用程序时获取 404

java - HQL 查询集合中的列

java - Spring MVC 分页和排序

java - 403访问禁止错误-当url具有动态路径参数时spring security

java - Spring Batch,通过作业的步骤可变

java - 创建名称为 'sessionFactory' 的 bean 时出错 : MalformedParameterizedTypeException

java - 使用自定义 hibernate 类型时的 ehcache bug?