Spring Data项目运行报错:找不到jakarta.persistence.EntityManagerFactory类
Spring Data+Hibernate操作MySQL运行报错问题
我正在学习Spring Data并开发一个类似练习清单的项目,计划通过Hibernate将数据存储至MySQL,但调用接口时出现异常。
Controller代码
@Controller public class UserController { private final IUserService userService; @Autowired public UserController(IUserService userService) { this.userService = userService; } @PostMapping(path = "/user/create") public ResponseEntity<UserPojo> createUser(@RequestBody User user) { UserPojo result = userService.createUser(user); return new ResponseEntity<>(result, HttpStatus.OK); } @GetMapping(path = "/user/{id}") public ResponseEntity<UserPojo> getUser(@PathVariable Long id) { UserPojo result = userService.getUser(id); return new ResponseEntity<>(result, HttpStatus.OK); } }
Service代码
@Service public class UserService implements IUserService { @PersistenceContext EntityManager entityManager; private final Converter converter; @Autowired public UserService(Converter converter) { this.converter = converter; } @Override @Transactional public UserPojo createUser(User user) { entityManager.persist(user); return converter.userToPojo(user); } }
报错信息
java.lang.ClassNotFoundException: jakarta.persistence.EntityManagerFactory org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1449) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1257) java.base/java.lang.Class.forName0(Native Method) java.base/java.lang.Class.forName(Class.java:488) java.base/java.lang.Class.forName(Class.java:467) java.base/sun.reflect.generics.factory.CoreReflectionFactory.makeNamedType(CoreReflectionFactory.java:114)
问题分析与解决方案
该错误是因为项目无法找到jakarta.persistence.EntityManagerFactory类,核心原因是缺少Jakarta Persistence API相关依赖,或Spring与Hibernate版本不兼容(Spring Boot 3.x及以上改用Jakarta EE规范,替代了旧Java EE的javax包)。
解决步骤:
- 检查
pom.xml,确保引入spring-boot-starter-data-jpa依赖,该依赖会自动引入Hibernate及Jakarta Persistence API,无需单独添加:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency>
- 若手动添加了持久化依赖,确认是Jakarta版本而非javax版本,比如将
javax.persistence:javax.persistence-api替换为jakarta.persistence:jakarta.persistence-api。 - 确保Spring Boot与Hibernate版本匹配:Spring Boot 3.x对应Hibernate 6.x,Spring Boot 2.x对应Hibernate 5.x(使用javax包),避免版本混搭导致API不兼容。
- 检查
application.properties/application.yml的数据库配置是否完整正确:
spring.datasource.url=jdbc:mysql://localhost:3306/your_database_name spring.datasource.username=root spring.datasource.password=your_password spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect
内容的提问来源于stack exchange,提问作者Dmytro Sydoruk
相关产品推荐
相关产品推荐

