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
- jquery中append()方法與after()方法的區別jQueryAPP
- ScheduledExecutorService中scheduleAtFixedRate方法與scheduleWithFixedDelay方法的區別
- wait()方法與await()方法的區別AI
- post與get的區別
- GET 與 POST 的區別
- get與post的區別?
- GET和POST兩種基本請求方法的區別
- GET與POST區別
- C#中抽象方法與虛方法的區別詳解及示例C#抽象
- laravel中delete()方法和destroy()方法的區別Laraveldelete
- GET與POST的真正區別
- Map集合中value()方法與keySet、entrySet區別
- 字串的match方法與正則的exec方法的區別字串
- HTTP中Get與Post有什麼區別?HTTP
- get與post的請求區別
- get與post的區別總結
- Java中 equals() 方法和 == 的區別Java
- Array()與Array.of()方法區別
- over fit與underfit的區別與解決方法
- POST與GET請求區別
- 你真的瞭解HTTP中GET與POST的區別嗎?HTTP
- vue中methods,computed,watch方法的區別Vue
- jQuery中css()和attr()方法的區別jQueryCSS
- Python中函式和方法的區別Python函式
- activity和fragment中startactivityforresult方法的區別Fragment
- Java基礎-- ==號與equals()方法的區別Java
- python函式與方法的區別總結Python函式
- JavaScript find()方法JavaScript
- 小解惑:查詢構造器與集合中的 get 方法
- 99%的人都理解錯了 HTTP 中 GET 與 POST 的區別HTTP
- 關於C++中字串輸入get與getline的區別C++字串
- Linux中wget、yum與apt-get用法及區別Linuxwgetapt-get
- 你真的瞭解靜態方法與例項方法的區別麼?
- 介面和列舉在方法中的區別
- python中類方法的區別是什麼Python
- IL角度理解C#中欄位,屬性與方法的區別C#