Spring Boot 3.x集成Hibernate报错Not a managed type,求助解决
问题核心
你遇到的错误本质是依赖版本严重不兼容:Spring Boot 3.2.x 对应的Hibernate版本是6.x系列,而你手动指定了Hibernate-Core 4.6.1.Final,这个版本和Spring Boot 3.x、Spring Data JPA 3.2.1完全不匹配,直接导致Hibernate无法识别实体类。
具体解决步骤
- 移除手动指定的Hibernate版本:Spring Boot的
spring-boot-starter-data-jpa已经内置了兼容的Hibernate版本,不需要手动声明hibernate-core的版本。删除pom.xml(或build.gradle)中手动指定的hibernate-core依赖或版本号,让Spring Boot的依赖管理自动适配。 - 检查实体类注解包:Spring Boot 3.x基于Jakarta EE,实体类的
@Entity、@Id等注解必须来自jakarta.persistence包,而不是旧的javax.persistence包。确保你的TestEntity类的导入语句是:import jakarta.persistence.Entity; import jakarta.persistence.Id; - 确认@EntityScan配置有效性:主启动类上的
@EntityScan必须精准指向实体类所在包,比如:
避免包路径拼写错误,或者遗漏子包的情况。@SpringBootApplication @EntityScan(basePackages = "com.test.entity") public class YourApplication { public static void main(String[] args) { SpringApplication.run(YourApplication.class, args); } } - 清理依赖缓存并重构项目:执行以下命令清理旧的依赖缓存,重新构建项目:
- Maven:
mvn clean install - Gradle:
./gradlew clean build
- Maven:
错误信息回顾
Caused by: java.lang.IllegalArgumentException: Not a managed type: class com.test.entity.TestEntity
at org.hibernate.metamodel.model.domain.internal.JpaMetamodelImpl.managedType(JpaMetamodelImpl.java:193)
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:468)
at org.hibernate.metamodel.model.domain.internal.MappingMetamodelImpl.managedType(MappingMetamodelImpl.java:98)
at org.springframework.data.jpa.repository.support.JpaMetamodelEntityInformation.(JpaMetamodelEntityInformation.java:82)
at org.springframework.data.jpa.repository.support.JpaEntityInformationSupport.getEntityInformation(JpaEntityInformationSupport.java:69)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getEntityInformation(JpaRepositoryFactory.java:246)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:211)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:194)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactory.getTargetRepository(JpaRepositoryFactory.java:81)
at org.springframework.data.repository.core.support.RepositoryFactorySupport.getRepository(RepositoryFactorySupport.java:317)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.lambda$afterPropertiesSet$5(RepositoryFactoryBeanSupport.java:279)
at org.springframework.data.util.Lazy.getNullable(Lazy.java:135)
at org.springframework.data.util.Lazy.get(Lazy.java:113)
at org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport.afterPropertiesSet(RepositoryFactoryBeanSupport.java:285)
at org.springframework.data.jpa.repository.support.JpaRepositoryFactoryBean.afterPropertiesSet(JpaRepositoryFactoryBean.java:132)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1820)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1769)
... 30 more
内容的提问来源于stack exchange,提问作者Mshd1

