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

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);
    }
}

验证步骤

  1. 执行mvn clean install清理并重新构建依赖
  2. 确保PostgreSQL服务启动,my_database数据库已创建
  3. 启动Spring Boot应用,检查控制台是否仍有EntityManager相关错误日志

内容的提问来源于stack exchange,提问作者user23450337

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 04:10:57