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

customer方法的UnsatifiedDependencyException

子车轶
2023-03-14

在命令行中运行spring boot后,出现以下错误:https://egkatzioura.com/2016/06/03/add-custom-functionality-to-a-spring-data-repository/

我的项目soruce代码位于github上:https://github.com/b3nhysteria/exprole_spring

该问题正在申请中:

System.out.println("============"+customerService.getListTransactionByCustomer());

正在使用的实现是

public String getListTransactionByCustomer (){
    return customerRepository.getAllTransaction();
}

在为方法添加了自定义repo实现之后,即使只是为了返回消息而进行了更改,我仍然遇到了问题。

如果有人有同样的建议,我会试试

顺便说一句,这个脚本是用来探索/学习的。

共有1个答案

丘华翰
2023-03-14

在CustomerRepository中,您可以扩展TransactionRepostom

public interface CustomerRepository extends JpaRepository<Customer, CustomerId>, TransactionRepoCustom {
    // ...
}

因此,Spring试图找到在TransactionRepoCustom中声明的方法getAllTransaction()的实现(但未能找到)。

要解决此问题,您需要:

  • 实现getAllTransaction;可能会创建另一个类TransactionRepoCustomImpl(推荐!),或

遵循第一种方法,它将类似于:

public class TransactionRepoCustomImpl implements TransactionRepoCustom {
    @Override
    public String getAllTransaction() {
        return "logic for your custom implementation here";
    }
}

按照最后一种方法,它将是:

public interface TransactionRepoCustom {
    public default String getAllTransaction() {
        return "Not implemented yet!"; // of course, this is just a naive implementation to state my point
    }
}

附加说明:

发生这种情况是因为Spring使用由其实现的接口提供的CustomerRepository的幕后默认(方法)实现。例如,Jparepository接口就是这种情况:您可以使用CusterRepository.findAll(),并且您没有在CustomerRepository中声明(也没有实现)该方法(它取自Jparepository的实现,很可能打包在依赖项中为您提供)。

现在,当您创建自己的接口(TransactionRepoCustom)并由CustomerRepository实现时,Spring会尝试找到TransactionRepoCustom中声明的所有方法的实现。由于您没有提供任何,spring无法为您创建该bean。

在本例中,通过我提供的修复,Spring找到了该方法的一个实现,因此它可以为您创建bean。

最后,我说建议为该方法提供一个实现,因为在Spring中执行操作的方法是在接口中声明方法,并在其他类中提供它们的实现(该接口的默认实现)。在这种情况下,您可以为此创建一个单独的类,或者在CustomerRepository中实现getAllTransaction方法。

当只有一个方法(可论证)时,可以在同一接口中声明默认实现,但如果接口增长,则很难维护。

 类似资料:
  • 我是Java和OOD的新手&一直在尝试为一个小的JDBC项目编写一些测试,但在让测试进入绿色光时遇到了一些问题。这就是我开始的地方,玩了很多次都没有效果。 下面是我的测试: 我的刀: 我的客户类:

  • 我从excel表格中提取旧记录,并将它们移动到数据库中。 我有一张客户表和一张订单表。 customers表包含customer\u id---主键---自动递增First\u Name Last\u Name字段 orders表包含以下字段:customer_id(空将是customers表的外键)First_Name(已填充)Last_Name(已填充) 我需要从customers表中逐行选择

  • 我试图创建一个post方法,以便将数据存储到mongoDb中,但是当我通过postman发送post请求时,出现了一个类型错误 我已经通过npm更新了软件包,但错误保持不变 类型错误:无法读取属性'Customer_id'的未定义在exports.create_customer(C:\用户\jawad\桌面\nodejspactise\控制器\admin.controll.js:64: 31)在L

  • 现在来考虑 Customer,Order, LineItem 和 Product 关系的模型。Customer 和 Order 之间 是一对多的关系,但是我们怎么来描述 Order / LineItem / Product呢? 我可以把 LineItem 作为描述 Order 和 Product 多对多关系的关联类,在 Hibernate,这叫做组合元素。 映射文件如下: <hibernate-

  • 问题内容: 在服务器中执行SQL脚本 错误:错误1628:表’customer’的注释太长(最大值= 60) 脚本: 评论 ‘表存储所有客户。拥有指向该客户注册的地址表和商店表的外键。\ n \ n有关客户的基本信息(例如名字和姓氏)存储在表本身中。创建记录的日期和信息的最后更新时间相同。 SQL脚本执行完成:语句:成功3次,失败1次 问题答案: As stated in the MySQL do

  • 在本主题中,我提出了一个问题:Laravel 5.2 auth change“users”表 但现在我的问题变了。默认情况下,用户表具有id。但是我想要一个客户id,所以我改变了一切,但它不起作用。它不断要求id。 SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“id”(SQL:select*from