我正在尝试使用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,连接在一个单独的类中进行了测试。
我正在使用的罐子(全部添加到类路径中):
我在标题中提到的错误提到了我的代码中的一行,这是第一个代码snipet中的一行,其中出现.buildSessionFactory()。
答案 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。
如果某个应用程序可以使用相同类的多个版本,则很难预测将首先加载哪个版本,这就是为什么它有时会起作用的原因。但它基本上是一个乐透,所以你不应该在实践中这样做。