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

是否有可能创建一个通用存储库来扩展Spring的CrudRepository的其他接口?

徐帅
2023-03-14

以下是详细情况:

我的应用程序中有多个模型,每个模型都有一个扩展Spring的< code>CrudRepository的存储库。

例如:

>

  • EyeColorModel具有存储库接口EyeColorRepository扩展CrudRepository

    < code>HairColorModel具有存储库< code >接口HairColorModel扩展了CrudRepository

    StateModel具有存储库接口,StateRepository扩展了Crudepository

    等等...

    我想创建一个通用的 MyApplicationRepository 来扩展我所有的个人仓库,这样我只需要创建 MyApplicationRepository 的单个实例,而不必创建我个人仓库的多个实例。

    我试过这个:

    public interface MyApplicationRepositoryInterface extends
        EyeColorRepository,
        HairColorRepository,
        StateRepository {
    }
    
    
    public class MyApplicationRepository implements MyApplicationRepositoryInterface {
    }
    

    然而,当我尝试在< code > MyApplicationRepositoryInterface 中扩展我的所有个人存储库时,我得到了以下错误:

    CrudRepository cannot be inherited with different arguments: <com.myapp.Models.EyeColor, java.lang.Long> and <com.myapp.Models.HairColor, java.lang.Long>
    

    那么,有没有一种方法可以完成我想做的事情,或者我只是在实例化我所有模型库的实例?

  • 共有3个答案

    南宫云
    2023-03-14

    如果您正在寻找使用存储库结构在spring boot中运行自定义SQL查询。请看一看。

    https://stackoverflow.com/a/71501509/4735043

    盖锦程
    2023-03-14

    这是错误的方法。CrudRepositories不应该被实现。您只需通过扩展CrudRepository接口为所有模型创建存储库接口。Spring在运行时提供了实现。

    如果您想通过单个类访问这些,请创建一个Service类,其中包含访问这些单独存储库中所需方法的方法。

    周马鲁
    2023-03-14

    首先,我将尝试解释您得到的错误:< code>CrudRepository是一个参数化接口,从不同参数化类型的(多个)< code>CrudRepository接口继承会在运行时产生冲突。

    IMO,你试图做的事情适得其反。Spring的数据存储库在运行时提供了CRUD方法的类型安全实现,当您扩展CrudRepository时。这为您提供了更清晰的代码,并提供了编译时的正确性。而且,CrudRepository已经非常通用 - 这种方式更好(在接口级别,而不是在实现中)。

    即使您要创建这样的存储库,您也必须放弃使用CrudRepository,并使用所有模型(例如saveEyeColor,saveHairColor等)中的所有CRUD方法创建一个类。也许使用类似SpringTemplate的东西。这不是IMO的最佳方法,因为您将混合域对象,并且该类将成为维护的噩梦。

    要回答您的问题,是的,您必须为每个模型注入一个单独的存储库实例。

     类似资料:
    • 但是现在,我希望这些接口实现也可用于扩展,例如。 我如何设置我的课程来实现这一点?(或者,反对这样做的固有缺陷或代码气味是什么?)

    • 在Spring构建存储库时,在我的存储库界面中,我使用以下内容扩展它 扩展CrudRepository 但是我注意到JpaRepository的使用,请参阅下面的示例

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

    • 我读了很多关于如何使用主/从范式实现单个作业的并行处理和分块的内容。考虑一个已经实现的Spring批处理解决方案,该解决方案打算在独立服务器上运行。通过最少的重构,我希望使其能够水平扩展,并在生产操作中更具弹性。速度和效率不是目标。 http://www.mkyong.com/spring-batch/spring-batch-hello-world-example/ 在以下示例中,使用连接到的作

    • Spring Boot应用程序在启动服务器时抛出异常。 异常是: 上下文初始化期间遇到异常-取消刷新尝试:org。springframework。豆。工厂未满足的依赖项异常:创建名为“userController”的bean时出错:未满足的依赖项通过字段“userService”表示;嵌套的异常是org。springframework。豆。工厂未满足的依赖项异常:创建名为“userService”

    • 假设我的接口按如下方式扩展了CrudRepository 我在服务类中使用EmployeeRepository接口,如下所示 错误很明显,因为接口EmployeeRepository不是由任何类实现的,并且 Autowired将失败,因为没有类实现EmployeeRepository。 不过,我对它是如何工作感到困惑的,因为我在GitHub和tutorial上看到的每一个代码都能完美地工作。