2012-04-02 53 views
2

我知道所有的這些術語像新的一樣,短暫的,獨立等,但有時我堅持像問題 -調用休眠session.get方法

當你調用Hibernate的Session到底發生了什麼。 get方法被調用? - hibernate將創建具有空構造函數的實例? - 會調用setter?

你能否對此表達出你的看法。

+1

您是否試圖在您的實體類中放置斷點以查看其中的一些行爲? – everton 2012-04-02 11:26:21

回答

0

當你調用hibernate session.get方法時調用什麼? - hibernate會用空的構造函數創建實例? - 會調用setter?

是的。在讀取數據後,Hibernate將調用no-argument constructor來創建bean。它會調用setter方法來設置相應的值。這就是爲什麼當任何getter/setter丟失時,hibernate會給出錯誤信息。

正如評論中提到的,您可以設置調試點並查看發生的情況。

+0

我不同意。如果一個屬性被配置爲按字段訪問,那麼如果我們沒有爲該屬性定義setter,那就沒關係。 – 2012-04-02 18:01:19

0

當你調用hibernate的時候實際發生了什麼session.get方法調用了 ? - hibernate將創建帶有空構造函數的實例 ?? - 會調用setter?

這取決於當前會話是否已經管理具有相同PK的實例,以及映射實體的屬性是否配置爲按屬性訪問或按字段訪問。

如果當前會話已經管理具有相同PK的實例,則將返回該實例。在這種情況下不會創建新的實例。

否則,將通過首先調用空構造函數創建一個新實例。然後將爲那些配置爲按屬性訪問的屬性調用setter。對於配置爲按字段訪問的屬性,它們的setter將不會被調用,因爲hibernate會直接將值注入這些字段。

請參閱this瞭解有關字段訪問和屬性訪問的更多信息。