【问题标题】:NoSuchMethodError in javax.persistence.Table [duplicate]javax.persistence.Table 中的 NoSuchMethodError [重复]
【发布时间】:2016-09-21 08:59:04
【问题描述】:

我使用的是 Hibernate 4.3.6 并使用基于注释的持久性定义。在 tomcat 8.0 上它工作正常。但是当我在 WAS Liberty 配置文件 8.5.5.7 中进行部署时,它给出了如下的根本原因异常,并且无法找出原因。有人告诉将 Hibernate 升级到 5.1.0 但没有用。我正在使用 Eclipse 进行开发。我也在使用 Spring 4.0.1。

Caused by: java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
    at org.hibernate.cfg.annotations.EntityBinder.processComplementaryTableDefinitions(EntityBinder.java:936)
    at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:824)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3788)
    at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3742)
    at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1410)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1844)
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1928)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBuilder.buildSessionFactory(LocalSessionFactoryBuilder.java:343)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:431)
    at org.springframework.orm.hibernate4.LocalSessionFactoryBean.afterPropertiesSet(LocalSessionFactoryBean.java:416)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1612)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1549)
    ... 57 more

【问题讨论】:

  • "有人告诉升级" ...嗯,是的,该方法显然是 JPA 2.1 的一部分,并且您没有使用一致版本的 JPA 提供程序和 JPA jar(以及任何“它不起作用" 表示您没有正确升级)。之前已经在这里问过很多次了,都可以使用搜索找到。

标签: java hibernate jpa


【解决方案1】:

WebSphere Liberty 类路径中的 jar 不正确,在 2.1 版本之前使用 JPA 注释,如 @NeilStockton 建议。

首先,尝试在Eclipse 的源代码中添加@Table(indexes = {})。如果它可以被正确导入——你在 Eclipse 的类路径中有一个正确的hibernate-jpa-2.1-api-1.0.0.Final.jar(它适用于 Hibernate 5)。之后删除@Table(indexes = {})

要查找从中加载了不正确的@Table 注释的jar,请尝试在独立于Spring 配置的某个地方执行此代码。你可以使用ContextListener

URL url = Thread.currentThread().getContextClassLoader()
    .getResource("javax/persistence/Table.class");
System.out.println(url);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2013-12-30
    • 2012-08-12
    • 1970-01-01
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    相关资源
    最近更新 更多