2012-06-13 19 views
1

Hibernate中的loadget方法Session有什麼區別?Hibernate:爲什麼Session.load方法存在於Hibernate中,因爲它會拋出不可恢復的異常如果找不到對象

如果沒有匹配的數據庫行 ,load()將拋出一個不可恢復的異常。

如果沒有匹配的數據庫 行,則get()將返回null。

爲什麼Hibernate Creators在API中保持此方法加載? (因爲如果沒有找到對象,它會拋出一個不可恢復的異常)。是不是get()足夠?

+0

你的意思是不可恢復的?負載只是拋出一個異常,但仍然可以捕獲... – beny23

+0

不可恢復是指當存在是一個嚴重錯誤時應該使用負載(當你知道一個實例存在時使用負載),即它應該不會用於通過捕獲異常來檢查存在,這就是應該使用的東西。 –

回答

1

還有更多的只是如果沒有找到實體的異常與空返回。

加載也可能會返回給您一個代理而不是實體的持久實例。這個代理會在第一次訪問屬性時觸發加載這個實體。

這在Hibernate論壇here上詳細討論過,之前在SO here以及其他許多地方。

+0

謝謝亞歷克斯,第一個鏈接非常好。我在這裏仍然有一個問題,就我的理解而言,load和get都會首先嚐試從緩存中獲取Object,如果沒有找到,那麼只會創建一個到Database的命中?如果我錯了,請糾正我。 – Pawan

+0

是的,這是正確的,兩種方法都會在進入數據庫之前碰到第一級和第二級緩存。 –

相關問題