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

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包)。

解决步骤:

  1. 检查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>
  1. 若手动添加了持久化依赖,确认是Jakarta版本而非javax版本,比如将javax.persistence:javax.persistence-api替换为jakarta.persistence:jakarta.persistence-api。
  2. 确保Spring Boot与Hibernate版本匹配:Spring Boot 3.x对应Hibernate 6.x,Spring Boot 2.x对应Hibernate 5.x(使用javax包),避免版本混搭导致API不兼容。
  3. 检查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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:35:26