当id不在数据库中时,Session.load返回InvocationException

时间:2010-11-09 14:00:47

标签: java hibernate

如果我致电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;
}

1 个答案:

答案 0 :(得分:4)

使用get()。期望load()抛出异常。来自load()的{​​{3}}:

  

您不应该使用此方法来确定是否存在实例(请改用get())。仅用于检索您假定存在的实例,其中不存在将是实际错误。