Spring Data JPA中的派生方法

时间:2018-11-09 21:05:59

标签: java spring orm spring-data-jpa

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/

3 个答案:

答案 0 :(得分:1)

它们可以以相同的方式使用。您可以命名方法以removedelete开头。有关删除模式,请参见PartTree类:

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

答案 1 :(得分:1)

在生成存储库实现时,Spring Data会检查任何方法 在存储库界面中,解析方法名称,并尝试了解 持久对象上下文中方法的目的。在 本质上,Spring Data定义了一种微型领域特定语言(DSL) 持久性详细信息在存储库方法签名中表示。 removedelete之间没有区别。您可以使用其中任何一个。相同 与find get read

答案 2 :(得分:0)

我相信他们正在使用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