面試題: get、load方法區別?面試
get: 及時加載,只要調用get方法馬上向數據庫查詢sql
load:默認使用懶加載,當用到數據的時候才向數據庫查詢。 數據庫
懶加載:(lazy)session
概念:當用到數據的時候才向數據庫查詢,這就是hibernate的懶加載特性。spa
目的:提供程序執行效率!hibernate
lazy 值代理
true 使用懶加載對象
false 關閉懶加載get
extra (在集合數據懶加載時候提高效率)it
在真正使用數據的時候才向數據庫發送查詢的sql;
若是調用集合的size()/isEmpty()方法,只是統計,不真正查詢數據!
懶加載異常
Session關閉後,不能使用懶加載數據!
若是session關閉後,使用懶加載數據報錯:
org.hibernate.LazyInitializationException: could not initialize proxy - no Session
如何解決session關閉後不能使用懶加載數據的問題?
// 方式1: 先使用一下數據
//dept.getDeptName();
// 方式2:強迫代理對象初始化
Hibernate.initialize(dept);
// 方式3:關閉懶加載
設置lazy=false;
// 方式4: 在使用數據以後,再關閉session!