如果我致电Session.load(Class, Serializable)
,例如Session.load(Class<MyClass>, 1L)
数据库中没有id = 1的行,返回的javassist代理(?)是com.sun.jdi.InvocationException
。我很难理解这里发生了什么 - 当然它应该只返回null
?
如果我在LockOptions
中使用session.load(...)
它会抛出一个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;
}
答案 0 :(得分:4)
使用get()
。期望load()
抛出异常。来自load()
的{{3}}:
您不应该使用此方法来确定是否存在实例(请改用get())。仅用于检索您假定存在的实例,其中不存在将是实际错误。