try {
x = session.load(...);
y = x;
}
catch(Exception e) {
//do something
}
如果密钥不存在,将加载(...)抛出异常
此外,在上面的代码中,如果执行到达赋值y = x,是否保证在那时x不为空?是否存在x在此时可以为空的情况?
答案 0 :(得分:6)
简而言之:
x
不会为空,因此y
load()
可能会有或可能没有异常load()
没有例外,且该对象不存在,则访问x
或y
时会出现例外。详细说明:
您是否在尝试确定密钥是否存在?或者你是假设它,但只想处理异常?
请参阅documentation,具体来说:
您不应该使用此方法来确定实例是否存在(而是使用
get()
)。仅使用它来检索您认为存在的实例,其中不存在将是实际错误。
从书中' hibernate in action'使用load():
应用程序可以检索a的有效引用(代理) 持久化实例,无需访问数据库即可检索其持久状态。所以
load()
在找不到持久对象时可能不会抛出异常 在缓存或数据库中;当代理时,异常将被抛出 被访问。
<强>因此强>:
如果您想知道该项目是否存在,请使用get()
,而不是load()
。
答案 1 :(得分:3)
添加@Tass的回复,我发现了(感谢同事)