try {
x = session.load(...);
y = x;
}
catch(Exception e) {
//do something
}
如果該鍵不存在,將加載(...)拋出一個異常什麼時候休眠Session.load()拋出一個異常
- 馬上
- 將返回一個代理和那麼當對象試圖從db中獲取對象時會拋出異常 ?
另外,在上面的代碼中,如果執行達到賦值y = x,那麼它是否保證在那一點上,x不爲空?有沒有這種情況下,在這一點上x可以爲空?
try {
x = session.load(...);
y = x;
}
catch(Exception e) {
//do something
}
如果該鍵不存在,將加載(...)拋出一個異常什麼時候休眠Session.load()拋出一個異常
另外,在上面的代碼中,如果執行達到賦值y = x,那麼它是否保證在那一點上,x不爲空?有沒有這種情況下,在這一點上x可以爲空?
簡而言之:
x
不會是負載後空,所以也不會y
load()
如果對象不存在load()
的異常,且該對象不存在,則在訪問x
或y
時會出現異常。要闡述:
你們是不是要確定關鍵是現在?或者你認爲它是,但只是想處理異常?
見documentation,具體是:
你不應該使用這種方法來確定一個實例存在(使用
get()
代替)。只用它來檢索你認爲存在的實例,其中不存在將是一個實際的錯誤。
從使用load()方法的書「冬眠在行動」:
的應用可以獲取而無需訪問數據庫檢索其持久有效的參考(代理)到 持久化實例州。因此,
load()
可能不會在緩存或數據庫中找到持久對象 時引發異常;當代理服務器 被訪問時,將會拋出異常。
所以:
如果你正在尋找了解該項目是否存在,使用get()
,不load()
。
添加到由@Tass的反應,我發現(感謝同事)
+1 - 從技術上講,它可以在得到對象後拋出異常**如果**對象被延遲加載。所以我錯了。 – hvgotcodes 2012-07-25 23:42:54
謝謝@Tass。我會將此作爲正確答案繼續。 – user1539577 2012-07-25 23:44:08