Is there any difference when using Spring Data JPA keywords between:
List findBySomeCondition();
and
List
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
one difference is that with findAllBy Hibernate filters (@Filters from org.hibernate.annotations) are applied and so a different sql.
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) andByis considered to be descriptive unless using one of the result-limiting keywords such as aDistinctto set a distinct flag on the query to be created orTop/Firstto 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, anddeleteand a terminatingBykeyword. Everything you put in betweenfindandBymakes your method name more expressive and does not affect query derivation.