Spring数据实体在不同的包中

时间:2016-09-16 20:18:11

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

我是Spring的新手,想在spring boot应用程序中使用以下项目结构。

  1. 每种类型实体的不同包及其相应的存储库实现。
  2. 存储库配置包
  3. *

    **com.demo.Customer**
        Customer.java
        CustomerRepository.java
        Application.java
    
    **com.demo.Order**
        Order.java
        OrderRepository.java
    
    **com.demo.config**
        ApplicationConfig.java
        CustomerConfig.java
        OrderConfig.java
    

    CustomerConfig.java

    import com.demo.cstore.core.Customer;
    @Configuration
    @EnableJpaRepositories(basePackageClasses = Customer.class)
    public class CustomerConfiguration {
    
    }
    

    Application.java

    @SpringBootApplication
    @ComponentScan(basePackages = {"com.demo.order"}) //inject repository from other packages
    public class Application {
        private static final Logger log = LoggerFactory.getLogger(Application.class);
    
        public static void main(String[] args) {
            SpringApplication.run(Application.class);
        }
    

    编译并运行应用程序后,仅创建客户实体。这是因为应用程序文件只识别客户实体,因为它存在于同一个包 com.demo.Customer 中。如何注入Order实体并创建实体?

2 个答案:

答案 0 :(得分:1)

您不需要使用 @ComponentScan 。 根据文件

  

@SpringBootApplication注释等同于使用   @Configuration,@ EnableAutoConfiguration和@ComponentScan与他们的   默认属性

所以你可以在主类上使用 @SpringBootApplication ,它位于包层次结构的基础包中,你会没事的。

您也可以参考此链接了解如何构建代码和主类位置

http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-structuring-your-code.html

这是 @SpringBootApplication

的API文档

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/SpringBootApplication.html

答案 1 :(得分:0)

EnableJpaRepositories注释接受一个字符串数组basePackages,您可以在这里添加实体所在的所有包:

 @EnableJpaRepositories(basePackages={"com.demo.order"
,"com.demo.customer"
,"com.demo.config"})

这一定就够了。希望这会有所帮助。