try {
x = session.load(...);
y = x;
}
catch(Exception e) {
//do something
}
如果键不存在,将 load(...) 抛出异常
- 马上
- 稍后尝试从数据库中获取对象时会返回一个代理然后抛出异常?
另外,在上面的代码中,如果执行到了赋值y = x,是否保证此时x不为null?是否存在此时 x 可以为空的情况?
简而言之:
x
加载后不会为空,所以也不会y
load()
如果对象不存在,可能有也可能没有例外load()
,并且对象不存在,那么访问x
or时就会出现异常y
。详细说明:
您是否试图确定密钥是否存在?或者你假设它是,但只是想处理异常?
请参阅文档,特别是:
您不应使用此方法来确定实例是否存在(
get()
改为使用)。仅使用它来检索您假设存在的实例,其中不存在将是实际错误。
从关于使用 load() 的“hibernate in action”一书中:
应用程序可以检索对持久实例的有效引用(代理),而无需访问数据库来检索其持久状态。所以
load()
在缓存或数据库中找不到持久对象时可能不会抛出异常;当访问代理时,稍后将引发异常。
所以:
如果您想知道该项目是否存在,请使用get()
,而不是load()
。
添加到@Tass 的回复中,我发现(感谢同事)