Spring Boot报错Not a managed type,常规方案尝试后仍未解决
Spring Boot 中
Not a managed type 错误排查求助 刚接触Spring框架,使用Spring Boot时碰到Not a managed type错误。已经查阅大量类似问题,试过@EntityScan、@ComponentScan注解方案,还按视频建议把所有文件移到同一包下,但问题依旧,无法定位错误原因。
错误信息
Error starting ApplicationContext. To display the condition evaluation report re-run your application with 'debug' enabled. 2022-11-29T15:54:30.869+01:00 ERROR 33472 --- [ main] o.s.boot.SpringApplication : Application run failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'IEleveRepository' defined in fr.school.schoolmanagement.repo.IEleveRepository defined in @EnableJpaRepositories declared on JpaRepositoriesRegistrar.EnableJpaRepositoriesConfiguration: Not a managed type: class fr.school.schoolmanagement.model.Eleve at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1751) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:599) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:521) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:915) ~[spring-context-6.0.2.jar:6.0.2] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:584) ~[spring-context-6.0.2.jar:6.0.2] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:146) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:730) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:432) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:308) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1302) ~[spring-boot-3.0.0.jar:3.0.0] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1291) ~[spring-boot-3.0.0.jar:3.0.0] at fr.school.schoolmanagement.SchoolApplication.main(SchoolApplication.java:12) ~[classes/:na] Caused by: java.lang.IllegalArgumentException: Not a managed type: class fr.school.schoolmanagement.model.Eleve at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.managedType(JpaMetamodelImpl.java:181) ~[hibernate-core-6.1.5.Final.jar:6.1.5.Final] at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:496) ~[hibernate-core-6.1.5.Final.jar:6.1.5.Final] at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:99) ~[hibernate-core-6.1.5.Final.jar:6.1.5.Final] at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.<init>(JpaMetamodelEntityInformation.java:77) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getEntityInformation(JpaEntityInformationSupport.java:69) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:246) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:211) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:194) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:81) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:317) ~[spring-data-commons-3.0.0.jar:3.0.0] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:279) ~[spring-data-commons-3.0.0.jar:3.0.0] at org.springframework.data.util.Lazy.getNullable(Lazy.java:229) ~[spring-data-commons-3.0.0.jar:3.0.0] at org.springframework.data.util.Lazy.get(Lazy.java:113) ~[spring-data-commons-3.0.0.jar:3.0.0] at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:285) ~[spring-data-commons-3.0.0.jar:3.0.0] at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:132) ~[spring-data-jpa-3.0.0.jar:3.0.0] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1797) ~[spring-beans-6.0.2.jar:6.0.2] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1747) ~[spring-beans-6.0.2.jar:6.0.2] ... 16 common frames omitted
相关代码
Eleve.java
package fr.school.schoolmanagement.model; import java.sql.Date; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table; @Entity @Table(name="eleve") public class Eleve { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name="eleve_id") private int id; @Column(name="eleve_nom") private String nom; @Column(name="eleve_prenom") private String prenom; @Column(name="eleve_date") private Date dateDeNaissance; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getNom() { return nom; } public void setNom(String nom) { this.nom = nom; } public String getPrenom() { return prenom; } public void setPrenom(String prenom) { this.prenom = prenom; } public Date getDateDeNaissance() { return dateDeNaissance; } public void setDateDeNaissance(Date dateDeNaissance) { this.dateDeNaissance = dateDeNaissance; } }
IEleveRepository.java
package fr.school.schoolmanagement.repo; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; import fr.school.schoolmanagement.model.Eleve; @Repository public interface IEleveRepository extends JpaRepository<Eleve, Integer> { }
EleveService.java
package fr.school.schoolmanagement.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import fr.school.schoolmanagement.model.Eleve; import fr.school.schoolmanagement.repo.IEleveRepository; @Service public class EleveService { @Autowired private IEleveRepository eleveRepo; public Eleve saveEleve(Eleve eleve) { return this.eleveRepo.save(eleve); } }
SchoolApplication.java
package fr.school.schoolmanagement; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.ComponentScan; @SpringBootApplication @ComponentScan({"fr.school.schoolmanagement.model"}) public class SchoolApplication { public static void main(String[] args) { SpringApplication.run(SchoolApplication.class, args); } }
项目结构
根包为fr.school.schoolmanagement,启动类SchoolApplication位于根包下,根包下包含model、repo、service三个子包,分别存放实体类、仓库接口、业务逻辑类。
问题原因及解决办法
核心原因
你使用的是Spring Boot 3.0.0版本,该版本基于Spring 6,而Spring 6开始全面迁移至Jakarta EE API,不再兼容Java EE的javax.persistence包。你的实体类Eleve使用的是javax.persistence.*下的注解,但配套的Hibernate 6.1.5仅识别jakarta.persistence.*下的JPA注解,导致实体未被识别为JPA管理类型。
解决步骤
- 替换实体类的注解包
将Eleve.java中所有javax.persistence开头的导入替换为jakarta.persistence:
import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; import jakarta.persistence.Table;
- 修正启动类的扫描配置
你的@ComponentScan仅扫描了model包,漏掉了repo和service包。实际上@SpringBootApplication默认会扫描启动类所在包及其所有子包,因此可以直接删除@ComponentScan注解;如果需要显式指定,改为扫描整个根包:
@SpringBootApplication // 可选:显式指定扫描根包 // @ComponentScan("fr.school.schoolmanagement") public class SchoolApplication { public static void main(String[] args) { SpringApplication.run(SchoolApplication.class, args); } }
- 验证依赖版本
确保spring-boot-starter-data-jpa依赖版本与Spring Boot版本一致(3.0.x),无需额外引入Hibernate依赖,starter已包含适配版本。
完成以上操作后重新启动项目,Not a managed type错误即可解决。
内容的提问来源于stack exchange,提问作者user13369031
相关产品推荐
相关产品推荐

