我們先來分析壹下Hibernate延遲加載的“秘密”。
集合屬性的延遲加載
Hibernate從數據庫初始化壹個持久實體的時候,實體的集合屬性是用persistent類初始化的嗎?如果集合屬性中有10萬條甚至上百萬條記錄,那麽當持久化實體初始化並捕獲所有集合屬性時,性能會急劇下降。完全有可能系統只需要使用持久化類集合屬性中的壹些記錄,而根本不需要使用所有的集合屬性,所以沒有必要壹次加載所有的集合屬性。
對於集合屬性,通常建議使用延遲加載策略。所謂延遲加載,就是在系統需要使用set屬性的時候,從數據庫中加載關聯數據。
例如,下面的Person類包含壹個set屬性,set屬性中元素的類型是Address。Person類的代碼片段如下:
清單1。Person.java
公共階層的人
{
//標識屬性
私有整數id;
//人名屬性
私有字符串名稱;
//保留Person的年齡屬性。
私人年齡;
//使用Set保存集合屬性。
私有設置& lt地址& gtaddresses = new HashSet & lt地址& gt();
//下面省略了每個屬性的setter和getter方法。
...
}
為了使Hibernate能夠管理持久性類的集合屬性,該程序為持久性類提供了以下映射文件:
清單2。Person.hbm.xml
& lt?xml版本="1.0 "編碼="GBK "?& gt
& lt!DOCTYPE hibernate-映射公共
"-//休眠/休眠映射DTD 3.0//EN "
" posite-element class="Address " >
& lt!-映射壹般屬性細節-& gt;
& ltproperty name = " detail "/& gt;
& lt!-映射公共屬性zip-& gt;
& ltproperty name = " zip "/& gt;
& lt/composite-element & gt;
& lt/set & gt;
& lt/class & gt;
& lt/hibernate-mapping & gt;
長文章請參考博客:/xc 635960736/article/details/7049863。