Spring Boot项目启动报错:找不到jakarta.persistence.EntityManager类型的Bean
解决Spring Boot中
jakarta.persistence.EntityManager Bean找不到的问题 1. 修正依赖配置(核心问题)
你手动引入的jakarta.persistence-api和hibernate-entitymanager与Spring Boot 3的依赖体系不兼容,Spring Boot 3基于Jakarta EE 9+,应该使用官方提供的spring-boot-starter-data-jpa统一管理JPA相关依赖,避免版本冲突和缺失关键自动配置。
修改pom.xml,替换原有JPA依赖:
<!-- 移除以下两个依赖 --> <!-- <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>5.6.6.Final</version> </dependency> --> <!-- 添加Spring Boot JPA Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <!-- 保留PostgreSQL驱动依赖(若未添加则补充) --> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <scope>runtime</scope> </dependency>
2. 修正DAO实现的EntityManager注入方式
你的TypeHunterDAOJpaImplementation同时使用@PersistenceContext和构造器注入EntityManager,导致注入逻辑冲突。选择其中一种方式即可,推荐使用@PersistenceContext(JPA标准注入方式)。
修改后的TypeHunterDAOJpaImplementation:
import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import jakarta.persistence.TypedQuery; import org.springframework.stereotype.Repository; import java.util.List; @Repository public class TypeHunterDAOJpaImplementation implements TypeHunterDAO { @PersistenceContext private EntityManager entityManager; // 移除冲突的构造器注入代码 // @Autowired // public TypeHunterDAOJpaImplementation(EntityManager theEntityManager){ // entityManager = theEntityManager; // } @Override public List<TypeHunter> findAll() { if (entityManager == null) throw new IllegalStateException("EntityManager does not work correctly."); TypedQuery<TypeHunter> query = entityManager.createQuery("from TypeHunter", TypeHunter.class); return query.getResultList(); } }
3. 修复REST控制器的代码错误
TypeHunterREST.java存在多处拼写和导入错误,会导致编译失败或注入异常:
- 类名拼写错误:
TypeHhnterRest→TypeHunterRest - 实体类导入错误:
TypeHunterHunter→TypeHunter - 构造器可显式添加
@Autowired(Spring 4.3+可省略,显式添加更清晰)
修改后的TypeHunterREST.java:
import com.user.springboot3.project.DAO.TypeHunterDAO; import com.user.springboot3.project.Entity.TypeHunter; // 修正实体类导入 import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RequestMapping("/api") @RestController public class TypeHunterRest { // 修正类名拼写 private TypeHunterDAO typeHunterDAO; @Autowired public TypeHunterRest(TypeHunterDAO typeHunterDAO) { this.typeHunterDAO = typeHunterDAO; } @GetMapping("/type-hunter") public List<TypeHunter> findAll() { return typeHunterDAO.findAll(); } }
4. 确认主启动类配置
确保Spring Boot主启动类带有@SpringBootApplication注解,且所在包能覆盖DAO、实体类和控制器的包路径(比如主类在com.user.springboot3.project下,子包DAO、Entity、Controller会被自动扫描):
package com.user.springboot3.project; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } }
验证步骤
- 执行
mvn clean install清理并重新构建依赖 - 确保PostgreSQL服务启动,
my_database数据库已创建 - 启动Spring Boot应用,检查控制台是否仍有EntityManager相关错误日志
内容的提问来源于stack exchange,提问作者user23450337
相关产品推荐
相关产品推荐

