No, there is no difference between them, they will execute exactly the same query, the All
part is ignored by Spring Data when deriving the query from the method name. The only important bit is the By
keyword, anything following it is treated as a field name (with the exception of other keywords like OrderBy
which incidentially can lead to some strange looking method names like findAllByOrderByIdAsc
).
This means something like this is perfectly valid:
List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition();
And will execute exactly the same SQL query as:
List<SomeEntity> findBySomeCondition();
or
List<SomeEntity> findAllBySomeCondition();
The documentation for the 2.3.6 release of Spring Data discusses this feature:
Any text between find
(or other introducing keywords) and By
is considered to be descriptive unless using one of the result-limiting keywords such as a Distinct
to set a distinct flag on the query to be created or Top
/First
to limit query results.
The purpose of feature was explained in a blog post about the then-upcoming 2.0 release of Spring Data:
Spring Data’s method parsing uses prefix keywords like find
, exists
, count
, and delete
and a terminating By
keyword. Everything you put in between find
and By
makes your method name more expressive and does not affect query derivation.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…