load和get都會可以起到從資料庫中獲取持久態資料的作用,但是還有些稍微的區別的。
@test(expected = illegalargumentexception.class)
public void testlazyload() throws exception catch (objectnotfoundexception ex)
tx.commit();
session.close();
}@test(expected = illegalargumentexception.class)
public void testlazyload() throws exception catch (objectnotfoundexception ex)
tx.commit();
session.close();
}
1. 在這裡可以看出load並沒有直接獲取資料,而是獲取到的**物件-->hibernateproxy,如果不獲取簡單型別的屬性的時候是不會丟擲異常的,但是get不一樣,他直接去資料庫中取,他得到的是物件本身,如果得不到的話就會返回空值。
再看乙個例子:
@test
public void testgetandloadsession() throws exception catch (objectnotfoundexception ex)
// 清空快取
session.clear();
// 驗證快取為空的情況下get是否為proxy
user user6 = (user)session.get(user.class, 1l); // 命中資料庫,直接將組裝完成的user實體進入快取
assert.asserttrue(!(user6 instanceof hibernateproxy));
// 驗證get從快取中取出物件
user user7 = (user)session.get(user.class, 1l);
assert.asserttrue(!(user7 instanceof hibernateproxy)); // 快取中是真實的user物件,get取出的就是真實的user物件
// 驗證load是否從一級緩訪問資料
user user8 = (user)session.load(user.class, 1l);
assert.asserttrue(!(user8 instanceof hibernateproxy)); // 快取中是真實的user物件,load取出的也是真實的user物件
tx.commit();
session.close();
}
2. 如果是load方法將物件載入到了快取當中,那麼在get和load的時候得到的都是**物件,但是如果是get方法將物件載入到了快取中的時候,那麼在get和load的時候得到的是乙個實體物件。
Hibernate查詢之get和load的區別
load方式檢索不到的話會丟擲org.hibernate.objectnotfoundexception異常 get方法檢索不到的話會返回null get方法和find方法都是直接從資料庫中檢索 而load方法的執行則比較複雜 首先查詢session的persistent context中是否有快取...
load和get之Hibernate的延遲載入機制
在hibernate中 如果你使用load方法,hibernate認為該id對應的物件 資料庫記錄 在資料庫中是一定存在的,所 以它可以放心的使用,它可以放心的使用 來延遲載入該物件。在用到物件中的其他屬性資料時才查詢資料庫,但是萬一資料庫中不存在該記錄,那沒辦法,只能拋異常 objectnotfo...
Hibernate中get和Load比較
load支援延遲載入.它認為該資料是一定存在的,所以會使用 進行延遲載入.若資料不存在,只能拋異常.get方法,不支援延遲載入.若資料不存在就直接返回null.load方法拋異常是指在使用該物件的資料時,資料庫中不存在該資料時拋異常,而不是在建立這個物件時。在load時會先去查一下session快取...