![](/img/trans.png)
[英]Is it a good idea to throw an Unchecked Exception for bad configuration?
[英]catch LazyInitializationException and throw IllegalStateException, is it a good idea and how to?
在使用Hibernate持久化实体的情况下,当开发人员遇到LazyInitializationException,... no session or session was closed
时,我想给他们提供更多的线索LazyInitializationException,... no session or session was closed
。
我已经考虑过在延迟加载的字段getter中捕获它,然后抛出IllegalStateException并附带新消息:
@OneToMany(mappedBy = "whatever", fetch = FetchType.LAZY, cascade = { CascadeType.MERGE, CascadeType.PERSIST })
@JoinColumn(name = "USER_ID")
private List<User> userList = new ArrayList<User>();
public List<User> getUserList() {
try {
List<User> userList = this.userList;
return userList ;
} catch (LazyInitializationException e) {
throw new IllegalStateException("Here I explain everything", e);
}
}
IllegalStateException似乎很合适:
表示已在非法或不适当的时间调用了方法。 换句话说,对于所请求的操作,Java环境或Java应用程序没有处于适当的状态。
(来源: https : //docs.oracle.com/javase/7/docs/api/java/lang/IllegalStateException.html )
但是渔获未达标,你能明白为什么吗? 顺便问一下,这是个好主意吗?
未达到捕获量的原因是,在getter中,您在List上所做的比在标准getter中做的更多。
List<User> userList = this.userList;
return userList ;
严格等于:
return this.userList;
相同的代码,相同的行为。
如果查看LazyInitException的堆栈,您会看到getter不是stacktrace,因此,您的捕获无法按预期工作。
当您“使用”列表(如对任何方法进行调用)时,会发生异常:例如,调用size()
或iterator()
。
因此,在您的getter中添加一个size()
调用。
我建议吗? 没有。
size()
)仍然是代码气味
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.