2010-11-09 22 views
0

如果我呼叫Session.load(Class, Serializable),例如, Session.load(Class<MyClass>, 1L)其中id = 1的數據庫中沒有行,返回的javassist代理(?)是com.sun.jdi.InvocationException。我很努力地理解這裏發生了什麼 - 當然,它應該簡單地返回null當id不在數據庫中時Session.load返回InvocationException

如果我在session.load(...)中使用了LockOptions,它會拋出一個Hibernate異常,說該行不存在 - 這對我來說比前者更有意義。

這就是我苦苦代碼:

public MyClass ensureEntity(Long id) { 
    MyClass entity = (MyClass)Session.load(Class<MyClass>, 1L); 
    if(entity == null) { 
     entity = new MyClass(id); 
     getSession().saveOrUpdate(entity); 
    } 
    return entity; 
} 

回答

4

使用get()。預計load()會引發異常。從load()the documentation

你不應該使用這種方法來確定一個實例存在(使用GET()代替)。只用它來檢索你認爲存在的實例,其中不存在將是一個實際的錯誤。

相關問題