从javax.persistence迁移到jakarta.persistence后出现Entity not a managed type错误
问题根因与解决方案
1. 优先确认Spring Boot版本兼容性
Spring Boot 2.x及更低版本原生仅支持javax.persistence注解,只有Spring Boot 3.x及以上版本才默认适配jakarta.persistence注解体系。如果当前项目使用的是2.x版本的Spring Boot,会直接导致jakarta的@Entity注解不被识别。
如果必须使用2.x版本的Spring Boot,需要额外引入Jakarta EE兼容包,否则建议直接升级到Spring Boot 3.x版本解决注解适配问题。
2. 补充跨模块扫描配置
由于你的实体类和JPA Repository拆分在不同模块,Spring默认仅扫描启动类所在包及其子包下的组件,需要在启动类上补充两个扫描注解:
@SpringBootApplication @EntityScan(basePackages = "reviewlist.core") // 填实体类所在的顶层包路径 @EnableJpaRepositories(basePackages = "你的Repository所在包路径") // 填CrudRepository实现类所在的包路径 public class RestServerApplication { public static void main(String[] args) { SpringApplication.run(RestServerApplication.class, args); } }
3. 排查依赖冲突
检查项目所有模块的pom.xml,确保不要混用javax和jakarta的相关依赖:
- 排除所有
javax.persistence:javax.persistence-api依赖 - 确保引入的
spring-boot-starter-data-jpa为3.x版本 - 确保Hibernate核心依赖版本为6.x及以上(对应Jakarta EE标准)
4. 手动配置Hibernate实体映射(可选,对应导师建议)
如果需要放弃注解改用手动配置,需要自定义JPA配置类,指定实体扫描路径:
@Configuration @EnableJpaRepositories(basePackages = "你的Repository包路径") public class JpaConfig { @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource) { LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean(); em.setDataSource(dataSource); // 实体类所在包路径 em.setPackagesToScan("reviewlist.core"); em.setJpaVendorAdapter(new HibernateJpaVendorAdapter()); return em; } }
内容的提问来源于stack exchange,提问作者Eliasborge
相关产品推荐
相关产品推荐

