簡體   English   中英

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

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

我正在嘗試使用 hibernate 注釋測試一些 POJO,並且不斷出現相同的錯誤。 我在另一個項目中使用了相同的配置,一切正常。 我測試了測試 hib 對象時使用的 jdbc 連接 - 連接工作正常。

我發現了一些關於相同錯誤的其他問題,但沒有任何幫助。

用main方法測試class的代碼:

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();

帶有 hibernate 注釋的 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 所寫,連接在單獨的 class 中進行了測試。

我正在使用的 jars(全部添加到 class 路徑):

  • antlr-2.7.7.jar byte-buddy-1.8.0.jar
  • 同學-1.3.0.jar
  • dom4j-1.6.1.jar
  • hibernate-commons-annotations-5.0.3.Final.jar
  • 休眠核心-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-logging-3.3.2.Final.jar
  • jboss-transaction-api_1.2_spec-1.0.1.Final.jar
  • mysql-connector-java-8.0.11.jar

我在標題中提到的錯誤提到了我的代碼中的一行,這是第一個代碼片段中發生 .buildSessionFactory() 的一行。

您的課程路徑中有沖突的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。

當應用程序具有相同類的多個版本時,很難預測將首先加載哪個版本,這就是為什么它有時看起來可以工作的原因。 但這基本上是彩票,因此您切忌在實踐中這樣做。

我有這個錯誤是因為我們使用樹脂服務器並升級了 hibernate

樹脂有 JPA 2.0

web 應用程序有 hibernate-jpa-2.1-api-1.0.2.Final.jar

這就是Steve C的回答中所述的沖突 jars 的原因

要解決這種情況,您需要按照https://www.caucho.com/resin-4.0/admin/database.xtp#Hibernate中所述進行操作

在樹脂配置文件中,像這樣將新的 api lib 添加到樹脂類路徑中

<server-default>
    <jvm-classpath>path/to/lib/hibernate-jpa-2.1-api-1.0.2.Final.jar</jvm-classpath>
    ...
<server-default>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM