带有 JPA 的 Spring Boot:将 @Entity 移动到不同的包

Posted

技术标签:

【中文标题】带有 JPA 的 Spring Boot:将 @Entity 移动到不同的包【英文标题】:Spring Boot w/ JPA: move @Entity to different package 【发布时间】:2014-06-15 11:36:00 【问题描述】:

我在使用 Spring-Boot 和 JPA 的第一步时遇到了问题。我从一个非常简约的example from Git 开始使用 Gradle。

现在只需将Customer 移动到另一个包,假设hello2 会导致异常Caused by: java.lang.IllegalArgumentException: Not an managed type: class hello2.Customer。我尝试添加

@ComponentScan(basePackageClasses= Customer.class) // AND OR @EnableJpaRepositories(basePackageClasses= Customer.class)

Application,但没有成功。

我做错了什么?

【问题讨论】:

【参考方案1】:

Spring Boot 中实体的位置可以使用@EntityScan 进行配置。

默认情况下,@EnableAutoConfiguration 在放置它的包中启用实体扫描(如果它不是默认包)。

【讨论】:

我正在使用这个 @SpringBootApplication @EntityScan(value="org.package.spike.entities") 其中 org.package.spike.entities 是包含我的实体类的包,但我仍然得到相同问题 这是几年后的事了,但我也得到了同样的结果。尝试了我能想到的所有可能的配置,但仍然得到“不是托管类型”,将 @EnableAutoConfiguration 和 @EntityScan("my package") 放入我的存储库配置中,仍然出现此错误。【参考方案2】:

您必须使用定位实体和存储库包

@EnableJpaRepositories(basePackages = "your.repositories.pakage")

@EntityScan(basePackages = "your.entities.pakage")

【讨论】:

我错过了@EntityScan,我的实体和我的存储库位于不同的包中。您也可以使用 @EntityScan(basePackageClasses = AClassInPackageWhereAllEntitiesAre.class) 谢谢!【参考方案3】:

这对我有用:

@EnableJpaRepositories(basePackages = "package1","package2")
@EntityScan(basePackages = "package3","package4")

【讨论】:

【参考方案4】:

为以下注释提供相同的包位置(即基本包)对我有用:-

@SpringBootApplication(scanBasePackages = "org.ashu.java.*")
@EnableJpaRepositories(basePackages = "org.ashu.java.*")    
@EntityScan(basePackages = "org.ashu.java.*")

【讨论】:

以上是关于带有 JPA 的 Spring Boot:将 @Entity 移动到不同的包的主要内容,如果未能解决你的问题,请参考以下文章

带有 JPA 和 R2DBC 的 Spring Boot 2.4 混合项目无法启动

带有 Axon 的 Spring Boot JPA

带有 MySql DB 的 Spring Boot JPA - 映射日期以错误的日期结束(休息 1 天)

带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用

带有查询 Spring-Boot jpa 1.5 的可选参数

使用Spring Data JPA的Spring Boot