Hibernate 5 - java.lang.NoSuchMethodError:javax.persistence.Table.indexes()

时间:2018-05-28 21:50:39

标签: java hibernate java-ee jpa-2.2

我正在尝试使用hibernate注释来测试一些POJO,并且我会一直得到相同的错误。我在另一个项目中使用了相同的配置,一切正常。我测试了测试hib对象时使用的jdbc连接 - 并且连接工作正常。

我发现了一些有关同一错误的其他问题,但没有任何帮助。

使用main方法测试类中的代码:

public static void main(String[] args) {

    SessionFactory factory = new Configuration()
            .configure("hibernate.cfg.xml")
            .addAnnotatedClass(Item.class)
            .buildSessionFactory();

    //create session
    Session session = factory.getCurrentSession();

    try {

        session.beginTransaction();

        List<Item> items = session.createQuery("from items").list();

带有休眠注释的POJO:

@Entity
@Table(name="items")
public class Item {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private int id;

    @Column(name="name")
    private String name;

    @Column(name="price")
    private double price;

    @Column(name="stock")
    private int stock;

    public Item() {
    }

    public Item(String name, double price) {
    this.name = name;
    this.price = price;
    }

下面是每个实体的getter和setter。

文件hibernate.cfg.xml与另一个项目中的同一个文件具有相同的配置,其中连接和hibernate代码完全正常工作 - 正如写的abobe,连接在一个单独的类中进行了测试。

我正在使用的罐子(全部添加到类路径中):

  • antlr-2.7.7.jar byte-buddy-1.8.0.jar
  • 同学-1.3.0.jar
  • dom4j-1.6.1.jar
  • 冬眠-公地注解-5.0.3.Final.jar
  • hibernate-core-5.3.0.Final.jar
  • 冬眠-JPA-2.0-API-1.0.0.Final.jar
  • jandex-2.0.3.Final.jar
  • 了Javassist-3.22.0-GA.jar
  • javax.persistence-API-2.2.jar
  • 的JBoss-测井3.3.2.Final.jar
  • 的JBoss-事务api_1.2_spec-1.0.1.Final.jar
  • MySQL的连接器的Java-8.0.11.jar

我在标题中提到的错误提到了我的代码中的一行,这是第一个代码snipet中的一行,其中出现.buildSessionFactory()。

1 个答案:

答案 0 :(得分:1)

您的类路径中存在冲突的jar:

  • 冬眠-JPA-2.0-API-1.0.0.Final.jar

  • javax.persistence-API-2.2.jar

javax.persistence.Table.indexes是JPA 2.1中添加的一项功能。

因此你应该丢弃hibernate-jpa-2.0-api-1.0.0.Final.jar jar,因为它只描述了JPA 2.0 API。

如果某个应用程序可以使用相同类的多个版本,则很难预测将首先加载哪个版本,这就是为什么它有时会起作用的原因。但它基本上是一个乐透,所以你不应该在实践中这样做。