调用getCurrentSession时出现jakarta.persistence.EntityManagerFactory无法解析错误
解决方法
这个错误核心是项目缺少Jakarta Persistence API依赖包,Hibernate 5后期及Hibernate 6版本已全面迁移到Jakarta EE规范,不再使用原Java EE的javax.persistence相关API。
1. 添加对应依赖
- 若使用Maven,在
pom.xml中加入:
<dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency>
- 若使用Gradle,在
build.gradle中加入:
implementation 'jakarta.persistence:jakarta.persistence-api:3.1.0'
版本可根据Hibernate版本调整:Hibernate 6.0对应3.0版本,Hibernate 6.1+对应3.1及以上版本。
2. 检查实体类注解
确保实体类(比如Users)的注解使用jakarta.persistence.*包下的类,替换掉旧的javax.persistence.*注解,例如:
- 替换
import javax.persistence.Entity;为import jakarta.persistence.Entity; - 替换
import javax.persistence.Id;为import jakarta.persistence.Id;
3. 清理重建项目
IDE缓存可能导致依赖未生效,执行项目的clean操作,再重新编译构建。
额外注意
getCurrentSession()需要在事务上下文内使用,且事务提交/回滚后该Session会自动关闭,无需手动调用session.close(),否则可能抛出异常。建议修改代码为:
try { session.beginTransaction(); // 执行数据库操作,比如保存、查询 session.getTransaction().commit(); } catch (Exception e) { if (session.getTransaction().isActive()) { session.getTransaction().rollback(); } e.printStackTrace(); } finally { factory.close(); }
内容的提问来源于stack exchange,提问作者Kuji
相关产品推荐
相关产品推荐

