Spring Data JPA findBy / findAllBy之间的区别


Answers:


133

不,它们之间没有区别,它们将执行完全相同的查询,All当从方法名称派生查询时,Spring Data会忽略该部分。唯一重要的一点是By关键字,其后的所有内容都被视为字段名称(其他关键字(如OrderBy偶然会导致某些奇怪的方法名称)之类的关键字除外findAllByOrderByIdAsc)。

这意味着这样的事情是完全正确的:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();

并将执行与以下命令完全相同的SQL查询:

List<SomeEntity> findBySomeCondition();

要么

List<SomeEntity> findAllBySomeCondition();

Spring Data 2.3.6发行版的文档讨论了此功能:

除非使用结果限制关键字之一(例如使用a来在要创建的查询上设置不同的标记或/限制查询结果find),By否则(或其他引入关键字)之间的任何文本都被视为描述性文本。DistinctTopFirst

在有关即将发布的Spring Data 2.0版本的博客文章中解释了功能的目的:

春季数据的方法解析使用前缀的关键字,例如findexistscount,和delete和终端By关键字。一切你把之间find,并By让您的方法名称更具表现力,并且不影响查询的推导。


感谢您的描述
尼基塔

感谢您指定OrderBy定义,表明By在OrderBy之前是必需的
Sylvester

是否有关于查询创建(包括修改)的完整文档?我只能找到片段(例如docs.spring.io/spring-data/jpa/docs/current/reference/html/…-关于..all ..的任何消息,请删除。.)
Ekaterina

那为什么还在那里呢?
Evghenii Orenciuc

我也找不到在文档中定义的前缀命名行为,但是当包含在前缀中时,有一件事改变行为:术语“ Distinct”,例如“ findDistinctBySomeCondition()4.4.2。查询创建
M. Justin

0

一个区别是与findAllBy一起使用了Hibernate过滤器(来自org.hibernate.annotations的@Filters),因此使用了不同的sql。


-3

如果我们要通过名称或其他类似条件来查找,则使用findBy方法 findByFirstName(String firstName);

findAll方法通常通过提供规范来查找

List<T> findAll(Specification<T> spec);

请参阅以下文档,以获取更多信息:

http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/html/jpa.repositories.html


不,您编写的方法来自JPASpecificationExecutor。我说的只是JpaRepository。我可以创建方法findAllByFirstName(String firstName),它将类似于findByFirstName。在这个问题中,我试图理解它们之间的区别。
Nikita
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.