springdatajpa 中get××方法與find××方法的區別
前言
如果是資料庫中的delete,update和insert操作,則不需要顯式的在Repository的子介面中定義方法。
具體可以去中文論壇查詢相關資料。下面主要討論select操作時get和find的區別。
下面列舉的就是springdatajpa的官方文件內容。
getOne()方法
getOne()返回對具有給定識別符號的實體的引用。getOne在內部呼叫EntityManager.getReference()方法。根據文件,此方法將始終返回代理,而不會訪問資料庫(延遲獲取)。如果請求的實體在資料庫中不存在,則此方法在實際訪問時將引發EntityNotFoundException。
findById()方法
該方法實際上將命中資料庫,並將實際物件對映返回到資料庫中的一行。如果資料庫中沒有記錄,則是EAGER載入的操作返回null。
這些方法之間的唯一真正區別在於效能。延遲載入的getOne()方法避免了從JVM進行資料庫往返,因為在真正訪問返回的代理物件的屬性之前,它從不訪問資料庫。
注:某中文論壇上有人說,用getOne取得這個物件,加斷點看一下這個物件是個hibernate的代理物件,而不是實體,裡面基本沒有值。然後換成findOne試了一下,斷點檢視這個取出來的物件,這個物件是實體,關聯也有。
總結
1.get方法select不到資料則報錯,find方法select不到資料則返回null。
2.get延遲載入,在真正訪問返回的代理物件的屬性之前,它從不訪問資料庫。find則立即載入,將返回到資料庫中的一行對映到實際的某個物件。
相關文章
- has(),find()以及filter()方法的區別Filter
- http請求中get和post方法的區別HTTP
- ScheduledExecutorService中scheduleAtFixedRate方法與scheduleWithFixedDelay方法的區別
- jquery中append()方法與after()方法的區別jQueryAPP
- HTTP中GET與POST的區別HTTP
- c# get_type與typeof方法的區別與聯絡和作用C#
- GET 與 POST 的區別
- post與get的區別
- get與post的區別?
- 淺談HTTP中Get與Post的區別HTTP
- Hibernate的Session的get()和load()方法區別Session
- wait()方法與await()方法的區別AI
- laravel中delete()方法和destroy()方法的區別Laraveldelete
- C#中抽象方法與虛方法的區別詳解及示例C#抽象
- GET和POST兩種基本請求方法的區別
- GET與POST區別
- 淺談HTTP中Get與Post的區別-javaHTTPJava
- GET與POST的真正區別
- 再看GET與POST的區別
- Java執行緒中yield與join方法的區別Java執行緒
- HTTP中Get與Post有什麼區別?HTTP
- Java中 equals() 方法和 == 的區別Java
- 字串的match方法與正則的exec方法的區別字串
- get與post的請求區別
- get與post的區別總結
- ajax中get和post的區別
- Array()與Array.of()方法區別
- $(selector).each()與$.each()方法的區別
- 你真的瞭解HTTP中GET與POST的區別嗎?HTTP
- activity和fragment中startactivityforresult方法的區別Fragment
- jQuery中css()和attr()方法的區別jQueryCSS
- ROR中h()方法和sanitize的區別
- http中的get和post的區別HTTP
- Map集合中value()方法與keySet、entrySet區別
- over fit與underfit的區別與解決方法
- POST與GET請求區別
- prop()方法和attr()方法的區別
- Ext中 get、getDom、getCmp的區別