Spring Boot创建Repository遇BeanCreationException:Not a managed type错误
问题解决:Not a managed type: class com.openclassrooms.api.models.Employee
核心原因
你使用的是Spring Boot 3.0.2,该版本基于Jakarta EE 9规范,所有JPA相关注解的包路径已从javax.persistence改为jakarta.persistence,但你的实体类仍在使用旧的Java EE包,同时pom.xml中存在冲突的依赖,导致Hibernate无法识别你的Employee类为JPA托管实体。
分步解决方案
1. 替换实体类的JPA注解包
将Employee类中所有javax.persistence.*的导入替换为jakarta.persistence.*:
package com.openclassrooms.api.models; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table; import lombok.Data; @Data @Entity @Table(name = "employees") public class Employee { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "first_name") private String firstName; @Column(name = "last_name") private String lastName; private String mail; private String password; }
2. 清理pom.xml中的冲突依赖
移除以下两个依赖:
hibernate-jpa-2.1-api:这是Java EE时代的JPA规范包,与Jakarta EE不兼容- 手动添加的
hibernate-core:spring-boot-starter-data-jpa已经包含了适配Spring Boot版本的Hibernate核心依赖,手动添加会导致版本冲突
修改后的pom.xml依赖部分:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies>
3. 可选:简化主类的包扫描配置
你的主类ApiApplication位于com.openclassrooms.api包下,@SpringBootApplication注解默认会扫描该包及其所有子包(包括com.openclassrooms.api.models),所以@EntityScan("com.openclassrooms.api.models")可以移除,简化主类代码:
package com.openclassrooms.api; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApiApplication { public static void main(String[] args) { SpringApplication.run(ApiApplication.class, args); System.out.println("Hello World !"); } }
验证
完成以上修改后,重新编译并启动应用,BeanCreationException错误应该会消失,Spring可以正常识别Employee实体并创建EmployeeRepository Bean。
内容的提问来源于stack exchange,提问作者Bhorah
相关产品推荐
相关产品推荐

