Hibernate之load和get的區別

2021-07-09 19:12:49 字數 1464 閱讀 2924

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快取...