JPA 中 find() 和 getReference() 的區別

在查詢的時候有兩個方法:find()和getReference(),這兩個方法的參數以及調用方式都相同。那麼這兩個方法有什麼不一樣的呢?
find()稱為 立即加載,顧名思義就是在調用的時候立即執行查詢語句。
getReference()稱為 延遲加載 或者 懶加載,它在調用的時候不會立即執行查詢語句,而是在使用到查詢對象的時候才會執行查詢語句。

具體如下:

使用finde方法查詢:

  1. 查詢的對象就是當前對象本身
  2. 在調用find方法的時候,就會執行sql語句查詢數據庫

使用getReference方法查詢:

  1. 查詢到的對象是一個動態代理對象,並不是對象本身
  2. 在調用getReference方法的時候,不會執行sql語句查詢數據庫。當調用查詢結果對象的時候,才會執行查詢sql語句(什麼時候用什麼時候執行sql語句)
Tags: