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);
我感到困惑的是removeByLastname
。 CrudRepository
有以delete
开头的delete
方法,并且没有以remove
开头的方法。我们有以remove
开头的方法吗?如果是,何时以及如何使用它们。
文档链接:https://docs.spring.io/spring-data/jpa/docs/2.1.2.RELEASE/reference/html/
【问题讨论】:
【参考方案1】:它们都可以以相同的方式使用。您可以将方法命名为以remove
或delete
开头。请参阅PartTree 类以了解 DELETE 模式:
private static final String DELETE_PATTERN = "delete|remove";
【讨论】:
满意的答案。【参考方案2】:在生成存储库实现时,Spring Data 会检查任何方法
在存储库接口中,解析方法名称,并尝试理解
方法在持久对象上下文中的用途。在
本质上,Spring Data 定义了一种微型领域特定语言(DSL)
其中持久性细节在存储库方法签名中表示。
remove
和 delete
之间没有区别。你可以使用它们中的任何一个。相同的
find
get
read
【讨论】:
【参考方案3】:我相信他们正在使用 List<User> 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
【讨论】:
那么这两种不同的命名约定是如何实现的呢?remove
是 Spring Data JPA
中的有效命名约定吗?
是的,删除和删除 JPA 1.7 及更高版本中的两个作品以上是关于spring data jpa中的派生方法的主要内容,如果未能解决你的问题,请参考以下文章
使用 Spring Data JPA 的服务层中的 Crud 方法
spring data jpa中的page对象带到jsp页面遍历问题