学习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
相关产品推荐
相关产品推荐

