Spring Data JPA difference between findBy / findAl

2019-02-05 15:52发布

Is there any difference when using Spring Data JPA keywords between:

List<SomeEntity> findBySomeCondition();

and

List<SomeEntity> findAllBySomeCondition();

2条回答
孤傲高冷的网名
2楼-- · 2019-02-05 16:04

findBy method is used if we want to find by name or some other criteria like findByFirstName(String firstName);

findAll methods generally finds by providing specification

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

Please see docs below for more clarity:

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

查看更多
对你真心纯属浪费
3楼-- · 2019-02-05 16:12

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();

Update: I'd never seen any official description of this behaviour in the documentation but in a recent blog post about the upcoming 2.0 release of Spring Data (Kay) it was explained:

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.

查看更多
登录 后发表回答