【问题标题】:Spring Boot w/ JPA: move @Entity to different package带有 JPA 的 Spring Boot:将 @Entity 移动到不同的包
【发布时间】: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,但没有成功。

我做错了什么?

【问题讨论】:

    标签: spring jpa spring-data spring-data-jpa spring-boot


    【解决方案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.*"})
      

      【讨论】:

        猜你喜欢
        • 2021-11-09
        • 2018-05-12
        • 2020-02-25
        • 2021-07-12
        • 2015-10-03
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        • 2017-08-28
        相关资源
        最近更新 更多