2016-05-16 83 views
13

有没有使用Spring数据JPA关键字时,任何差别之间:春数据JPA差异

List<SomeEntity> findBySomeCondition(); 

List<SomeEntity> findAllBySomeCondition(); 

回答

15

没有,它们之间没有什么区别,他们将执行完全相同的查询时,All部分是由Spring数据推导时,忽略从方法名称查询。唯一重要的是By关键字,它后面的任何内容都被视为字段名称(除了其他关键字,如OrderBy,这些关键字可能会导致一些奇怪的外观方法名称,如findAllByOrderByIdAsc)。

这意味着这样的事情是完全合法:

List<SomeEntity> findAnythingYouWantToPutHereBySomeCondition(); 

并且将执行完全一样的SQL查询为:

List<SomeEntity> findBySomeCondition(); 

List<SomeEntity> findAllBySomeCondition(); 

更新:我我从来没有看到过这种行为的官方描述在文档中,但在recent blog post关于Spring数据(凯)即将2.0版本iour有人解释:

春数据的方法解析使用前缀关键字,比如findexistscount,并delete和终止By关键词。您在findBy之间放置的所有内容都会使您的方法名称更具表达性,并且不会影响查询派生。

+0

感谢您的描述 – Nikita

0
如果我们想通过名称查找

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

+0

不,你写的方法来自JPASpecificationExecutor。我只是谈论JpaRepository。我可以创建方法findAllByFirstName(String firstName),它的作用类似于findByFirstName。在这个问题中,我试图理解它们之间的区别。 – Nikita