2016-11-25 57 views
0

當我們調用session.get()方法時,hibernate將命中數據庫並返回原始對象。session.load()方法如何在不觸及數據庫的情況下提取數據?

當您調用session.load()方法時,它將始終返回一個「代理」對象而不查詢數據庫。

我的問題是如果load()方法沒有命中數據庫,那麼它如何知道請求的信息是否在數據庫中可用。

+1

直到你真的嘗試閱讀它。 –

+0

那麼使用load()有什麼好處?我正在尋找get()和load()之間的區別,但上下文就是這個地方。 – sNegi

+0

不,這不是JPA API,所以請不要將它標記爲 –

回答

1

假設你有父子關聯。例如,有一個主表。您正在將一個對象的引用注入其他對象。

考慮一個學生課。許多學生屬於同一個學校標準。

這裏標準和學生之間會產生一對多的關係。

現在,當保存學生對象時,您將需要標準的持久對象。

你必須堅持學生對象,如下:

student.setStandard(standard); 

現在,你有標準對象的主鍵。而且你知道這個標準已經存在於數據庫中。現在考慮它是一個主表。因此,而不是實際進入數據庫,你這是傻瓜已經有一個目標:

Standard standard = session.load(Standard.class, id); 

,因爲Hibernate不會碰到數據庫,它會創建將在您的學生對象注入一個代理對象。當你在那個時候會打電話給session.save(學生)時,它將被保存。

但是,假設您使用load()方法加載標準對象。如果你會嘗試調用像standard.getClassTeacher()那樣的任何方法,那麼它實際上會碰到數據庫,如果它在db中找不到,那麼它會拋出錯誤。

相關問題