Session.load возвращает InvocationException, когда идентификатор отсутствует в базе данных - PullRequest
0 голосов
/ 09 ноября 2010

Если я позвоню 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 Ответ

4 голосов
/ 09 ноября 2010

Используйте get(). Ожидается, что load() выдаст исключение. С документация load():

Вы не должны использовать этот метод, чтобы определить, существует ли экземпляр (используйте вместо него get ()). Используйте это только для получения экземпляра, который, по вашему мнению, существует, где несуществование будет реальной ошибкой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...