spring data jpa中的派生方法

Posted

技术标签:

【中文标题】spring data jpa中的派生方法【英文标题】:Derived methods in spring 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/

【问题讨论】:

【参考方案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 及更高版本中的两个作品

以上是关于spring data jpa中的派生方法的主要内容,如果未能解决你的问题,请参考以下文章

spring-data-jpa中的查询方法

spring-data-jpa

使用 Spring Data JPA 的服务层中的 Crud 方法

spring data jpa中的page对象带到jsp页面遍历问题

没有 JPQL 查询的 Spring-data-jpa 中的 CURRENT_DATE

Spring Data JPA 中的分页(限制和偏移)