[英]java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;
[英]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 路徑):
我在標題中提到的錯誤提到了我的代碼中的一行,這是第一個代碼片段中發生 .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.