You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

学习Hibernate连接SQL Server时遇CriteriaDelete类缺失异常

问题描述

学习Hibernate并尝试连接SQL Server时,编写代码后出现异常:

代码片段

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

Session session = factory.getCurrentSession();

try {
    session.beginTransaction();
    List<Car> cars =  session.createQuery("from cars").getResultList();

    for (Car car : cars) {
        System.out.println(car.getCars_name());
    }

    session.getTransaction().commit();
} finally {
    factory.close();
}

报错信息

cannot access javax.persistence.criteria.CriteriaDelete
class file for javax.persistence.criteria.CriteriaDelete not found


解决方案

1. 补充JPA API依赖

该报错核心原因是缺少JPA规范的API包,javax.persistence.criteria.CriteriaDelete属于JPA 2.1及以上版本的类。根据构建工具添加对应依赖:

  • Maven(适用于Hibernate 5.x,对应JPA 2.2):
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>javax.persistence-api</artifactId>
    <version>2.2</version>
</dependency>
  • Gradle:
implementation 'javax.persistence:javax.persistence-api:2.2'

如果使用Hibernate 6+,JPA已迁移至Jakarta EE,需替换为Jakarta版本依赖:

<dependency>
    <groupId>jakarta.persistence</groupId>
    <artifactId>jakarta.persistence-api</artifactId>
    <version>3.1.0</version>
</dependency>

同时代码中所有javax.persistence相关导入需改为jakarta.persistence。

2. 修正HQL查询语句

HQL操作的是实体类而非数据库表名,原代码中from cars错误,应改为对应实体类名Car,同时建议添加泛型参数避免类型转换问题:

List<Car> cars = session.createQuery("from Car", Car.class).getResultList();

3. 验证依赖版本兼容性

确保Hibernate版本与JPA依赖版本匹配:

  • Hibernate 5.x → JPA 2.1/2.2(javax.persistence-api)
  • Hibernate 6.x → Jakarta Persistence 3.x(jakarta.persistence-api)

内容的提问来源于stack exchange,提问作者ismail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:52:37