带有 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 混合项目无法启动
带有 MySql DB 的 Spring Boot JPA - 映射日期以错误的日期结束(休息 1 天)
带有 Jackson 和 Spring Boot 的实体 JPA 中的循环引用