Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 弹簧靴不';使用@ComponentScan或can'时,无法在同级软件包中找到JParepositions;使用@EnableJpaRepositories时不要初始化它们_Java_Spring_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java 弹簧靴不';使用@ComponentScan或can'时,无法在同级软件包中找到JParepositions;使用@EnableJpaRepositories时不要初始化它们

Java 弹簧靴不';使用@ComponentScan或can'时,无法在同级软件包中找到JParepositions;使用@EnableJpaRepositories时不要初始化它们,java,spring,spring-boot,spring-data-jpa,Java,Spring,Spring Boot,Spring Data Jpa,我有一个由多个模块组成的maven项目。其中三个模块是 “项目核心”(包含模型类) “项目数据”(包含Spring数据JPA存储库) “ProjectSpring”(包含带有REST控制器的主spring启动应用程序) 启动时,我会遇到以下异常: Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.foo.bar.data.Ord

我有一个由多个模块组成的maven项目。其中三个模块是

  • “项目核心”(包含模型类)
  • “项目数据”(包含Spring数据JPA存储库)
  • “ProjectSpring”(包含带有REST控制器的主spring启动应用程序)
启动时,我会遇到以下异常:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.foo.bar.data.OrderRepository] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}
我知道SpringBoot应用程序在默认情况下只在自己的包和子包中查找bean,但在本例中,bean位于兄弟包中。我已经尝试向应用程序类添加
@ComponentScan({“org.foo.bar.data”})
,但没有效果

使用
@EnableJpaRepositories(basePackages={“org.foo.bar.data”})
抛出

Caused by: java.lang.IllegalArgumentException: Not an managed type: class org.foo.bar.core.model.Order
我做错了什么

目录树(已修剪)如下所示:

project
├── project-core
│   └── src
│       └── main
│           └── java
│               └── org
│                   └── foo
│                       └── bar
│                           └── core
|                               └── model
|                                   └── Order.java
├── project-data
│   └── src
│       └── main
│           └── java
│               └── org
│                   └── foo
│                       └── bar
│                           └── data
|                               └── OrderRepository.java
│
└── project-spring
    └── src
        └── main
            └── java
                └── org
                    └── foo
                        └── bar
                            └── spring
                                └── Application.java
订单存储库:

public interface OrderRepository extends JpaRepository<Order, Integer> {
    List<Order> findByDeliveryOverview(DeliveryOverview deliveryOverview);
    List<Order> findByDeliveryOverviewAndCustomer(DeliveryOverview deliveryOverview, Customer customer);
}

主要问题是你的结构

要扫描实体,需要在应用程序类上使用
@EntityScan
,并启用所需的存储库
@EnableJpaRepositories

@SpringBootApplication
@EntityScan({"org.foo.bar.core.model"})
@EnableJpaRepositories(basePackages = {"org.foo.bar.data"})
public class Application { ... }

但是,我建议将
应用程序
类移动到
org.foo.bar
,然后您只需要
@SpringBootApplication
,因为它将从该目录开始扫描。

主要问题是您的结构

要扫描实体,需要在应用程序类上使用
@EntityScan
,并启用所需的存储库
@EnableJpaRepositories

@SpringBootApplication
@EntityScan({"org.foo.bar.core.model"})
@EnableJpaRepositories(basePackages = {"org.foo.bar.data"})
public class Application { ... }

但是,我建议将
应用程序
类移动到
org.foo.bar
,然后您只需要
@SpringBootApplication
,因为它将从该目录开始扫描。

@Repository
注释
OrderRepository
,并删除此语句
{“org.foo.bar.data”}
@ComponentScan
中的
@Repository
注释
OrderRepository
并删除
{“org.foo.bar.data”}
中的这条语句
@ComponentScan

中的
问题是你在技术上把事物分开,而不是功能上的。删除组件扫描,为数据包添加
@EntityScan
,并像以前一样添加
@EnableJpaRepositories
。或者简单地将您的
应用程序
类移动到推荐的
org.foo.bar
。问题是您在技术上分离了事物,而不是功能性的。删除组件扫描,为数据包添加
@EntityScan
,并像以前一样添加
@EnableJpaRepositories
。或者只需将您的
应用程序
类移动到推荐的
org.foo.bar
。感谢您将此作为注释之外的答案发布。我决定移动应用程序类。感谢您将此作为评论之外的回答。我决定换一个应用类。