当前位置: 首页 > 知识库问答 >
问题:

尽管有@enableJParepositories注释,Spring JPA没有实现/autowiring存储库

拓拔飞飙
2023-03-14

当我启动应用程序时,我得到了一个异常,其中Spring抱怨UnsatifiedDependencyException:

Exception in thread "main" org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'applicationConfig': Unsatisfied dependency expressed through field 'controlRepository'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean found for dependency [com.oak.api.finance.repository.ControlRepository]: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)

我的应用程序是以这种格式组织的:

>

  • 我用正确的Spring JPA注释声明了我的存储库接口:

    @RepositoryRestResource(collectionResourceRel = "exchange", path = "exchanges")
    public interface ControlRepository extends PagingAndSortingRepository<Control, Long> { 
    }
    
    @SpringBootApplication
    @EntityScan(basePackages = {"com.oak.api.finance.model.dto"})
    @EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"})
    public class EntryPoint {
        public static void main(String[] args) {
            Logger logger = LogManager.getLogger(EntryPoint.class);
            logger.info("Starting application");
    
            ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class);
    //      SpringApplication.run(EntryPoint.class, args);
    
            ctx.getBean(ApplicationServer.class).start();
        }
    
    @Autowired 
    private ControlRepository controlRepository;
    @Autowired
    private CompanyRepository companyRepository;
    @Autowired
    private SectorRepository sectorRepository;
    
        ApplicationContext ctx = new AnnotationConfigApplicationContext(ApplicationConfig.class)
    

    这显然没有发生,Spring正在向autowire抱怨丢失了Bean,但我不确定我丢失了什么。

  • 共有1个答案

    李胡媚
    2023-03-14

    我的猜测是您的存储库没有被扫描,因此bean没有被创建。你能试着删除这两个注释吗

    @EntityScan(basePackages = {"com.oak.api.finance.model.dto"})
    @EnableJpaRepositories(basePackages = {"com.oak.api.finance.repository"})
    

    并且只保留@springbootapplication。如果这不起作用,您可能需要检查包结构(如果可能,请在此处粘贴截图)

    @springbootapplication替换为

    @Configuration
    @EnableAutoConfiguration
    @ComponentScan("com.oak")
    
     new SpringApplicationBuilder() 
            .sources(SpringBootApp.class) 
            .web(false) 
            .run(args); 
    
     类似资料:
    • 我有两个服务类和一个存储库类。当我尝试将一个服务bean自动连接到另一个服务bean时,一个bean会被注入。但是当我尝试调用该方法时,它会显示。请帮帮我。过去3天我一直坚持这样做。 我的第一堂服务课: 我的第二个服务类别: 我的存储库类: 我已经尝试了一切(例如

    • 我正在使用100个实体(使用JHipster)设置一个新的Spring Boot API,我的问题是:鉴于我有一组存储库层方法,我希望我的所有存储库都能够调用这些方法。 我已经尝试制作所有接口来扩展('RepositoryQuery'是我默认的自定义接口名称后缀),然后使用特定于实体的类。请注意,所有的类扩展了一个泛型实现类,名为。 请注意,给定正则表达式中的“.*”代表我的持久实体集中的任何实体

    • 问题内容: 如果我们使用 代替 如果我们使用不带注释的日期列属性,会有任何副作用吗? 问题答案: 我设法找到的只有一部分文档: 在纯Java API中, 未定义时间 的 时间精度 。处理时态数据时,您可能需要描述数据库中的预期精度。时间数据可以具有DATE,TIME或TIMESTAMP精度(即实际日期,仅时间或两者兼有)。使用@Temporal批注进行微调。 从2.2.2.1开始。声明基本属性映射

    • 我想使用SpringDataRepository接口来执行本机查询——我认为这种方式最简单,因为复杂性较低。 但是当扩展接口时。

    • 我有一个类,它具有应该被注入的字段。 并且有接口仅由类实现,具有的。 当我尝试启动SpringBootApplication时,会抛出。 为什么接口注册为bean的一个,即使它没有注释,也没有包含任何bean配置? 我发现,如果我不使用作为,一切都很好。 有什么想法吗?

    • 所以我想要一个“Void Repository”,通过它可以访问不一定在实体上操作的存储过程。 但这当然不起作用,因为期望是一个实体。 有没有一种方法可以使用注释而无需创建虚拟实体,或者我是否坚持使用使用通过准备好的语句进行查询的已实现类? 因为老实说,这很难看: