【问题标题】:Derived methods in spring data jpaspring data jpa中的派生方法
【发布时间】:2018-11-09 21:05:59
【问题描述】:

Spring Data JPA 文档告诉我们,我们可以为delete 功能派生方法。然后文档给出了示例:

interface UserRepository extends CrudRepository<User, Long> {

   long deleteByLastname(String lastname);

   List<User> removeByLastname(String lastname);
}

我感到困惑的是removeByLastnameCrudRepository 有以delete 开头的delete 方法,并且没有以remove 开头的方法。我们有以remove 开头的方法吗?如果是,何时以及如何使用它们。

文档链接:https://docs.spring.io/spring-data/jpa/docs/2.1.2.RELEASE/reference/html/

【问题讨论】:

    标签: java spring orm spring-data-jpa


    【解决方案1】:

    它们都可以以相同的方式使用。您可以将方法命名为以removedelete 开头。请参阅PartTree 类以了解 DELETE 模式:

    private static final String DELETE_PATTERN = "delete|remove";

    【讨论】:

    • 满意的答案。
    【解决方案2】:

    在生成存储库实现时,Spring Data 会检查任何方法 在存储库接口中,解析方法名称,并尝试理解 方法在持久对象上下文中的用途。在 本质上,Spring Data 定义了一种微型领域特定语言(DSL) 其中持久性细节在存储库方法签名中表示。 removedelete 之间没有区别。你可以使用它们中的任何一个。相同的 findgetread

    【讨论】:

      【解决方案3】:

      我相信他们正在使用 List&lt;User&gt; removeByLastname(String lastname);,因为已经有 long deleteByLastname(String lastname); 并且您不能拥有具有相同名称和参数的函数

      在 Spring Data JPA (>=1.7.x) 的现代版本中,可以访问用于删除和删除操作的查询派生

      https://www.logicbig.com/tutorials/spring-framework/spring-data/jpa-derived-delete-queries.html

      【讨论】:

      • 那么这两种不同的命名约定是如何实现的呢? removeSpring Data JPA 中的有效命名约定吗?
      • 是的,删除和删除 JPA 1.7 及更高版本中的两个作品
      猜你喜欢
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-24
      • 2022-01-23
      • 2013-11-14
      • 2017-01-06
      • 2021-03-16
      • 2018-11-29
      相关资源
      最近更新 更多