2016-05-16 102 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