zoukankan      html  css  js  c++  java
  • Springboot应用中@EntityScan和@EnableJpaRepositories的用法

    Springboot应用开发中使用JPA时,通常在主应用程序所在包或者其子包的某个位置定义我们的EntityRepository,这样基于Springboot的自动配置,无需额外配置,我们定义的EntityRepository即可被发现和使用。但有时候我们需要定义EntityRepository不在应用程序所在包及其子包,那么这时候就需要使用@EntityScan@EnableJpaRepositories了。

    上面提到的EntityRepository指的是通过类似下面的方式定义的EntityRepository :

    @Entity
    @Table(name = "grade")
    public class Grade {
       // 省略具体内容
    }
    
    @Repository
    public interface GradeRepository extends JpaRepository<Grade, Long>, JpaSpecificationExecutor<Grade> {
       // 省略具体内容
    }
    

    @EntityScan

    @EntityScan用来扫描和发现指定包及其子包中的Entity定义。其用法如下:

    @EntityScan(basePackages = {"com.department.entities","come.employee.entities"})
    

    如果多处使用@EntityScan,它们的basePackages集合能覆盖所有被Repository使用的Entity即可,集合有交集也没有关系。但是如果不能覆盖被Repository使用的Entity,应用程序启动是会出错,比如:

    Not a managed type: com.customer.entities.Customer

    @EnableJpaRepositories

    @EnableJpaRepositories用来扫描和发现指定包及其子包中的Repository定义。其用法如下:

    @EnableJpaRepositories(basePackages = {"com.department.repositories","come.employee.repositories"})
    

    如果多处使用@EnableJpaRepositories,它们的basePackages集合不能有交集,并且要能覆盖所有需要的Repository定义。

    如果有交集,相应的Repository会被尝试反复注册,从而遇到如下错误:

    The bean ‘OrderRepository’, defined in xxx, could not be registered. A bean with that name has already been defined in xxx and overriding is disabled.

    如果不能覆盖所有需要的Repository定义,会遇到启动错误:

    Parameter 0 of method setCustomerRepository in com.service.CustomerService required a bean of type ‘come.repo.OrderRepository’ that could not be found.

    原文地址:https://blog.csdn.net/andy_zhang2007/article/details/84099595
  • 相关阅读:
    sql server 错误9003:LSN无效(日志扫描号无效),对数据库的修复.
    用C#调用C++DLL时的字符串指针参数传递问题
    sql server 2005中的Service broker小示例(未完善)
    水晶报表钻取数据,在明细层导的时候,报表会从新加载,并显示主报表
    [转]gridview获取当前行索引的方法
    验证视图状态 MAC 失败的解决办法
    SQL SERVER 2005中对存储过程进行签名(转)
    MSChart图表控件的一些使用
    Repository模式
    职能式管理和流程式管理
  • 原文地址:https://www.cnblogs.com/jpfss/p/11127092.html
Copyright © 2011-2022 走看看