Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Hibernate, не ловиться исключение


Автор: diablero 7.6.2008, 19:36
Собственно сабж.
Код мне казался настолько очевидным, что я его даже не проверял. А когда это обнаружилось, то поставило меня в тупик. 
Если нет указанного id, то Hibernate бросает ObjectNotFoundException, но вот поймать его не получется, происходит возврат из метода, минуя catch.
Как поймать и обработать исключение, если объекта с заданным id нет?
Код

public Test getTest(int id) {
        try {
            Session session = HibernateUtil.currentSession();
            return (Test) session.load(Test.class, id);
        } catch (Exception e) {
            return null;
        }
    }

Автор: check 7.6.2008, 22:06
Цитата(diablero @  7.6.2008,  19:36 Найти цитируемый пост)
Hibernate бросает ObjectNotFoundException, но вот поймать его не получется, происходит возврат из метода, минуя catch.
Могу предположить, что при попытке привести  к Test null, который возвращает метод load,  выбрасывается нулл поинтер.  Поэтому до catch и не доходит.  
надо сначала разобраться с этим нуллом,   а потом уже приводить к чему-либо полученное значение.  

Автор: v2v 8.6.2008, 00:10
по доках, он не нулл возвращает, а бросает HibernateException.

diablero, а объект с указанным ид точно в базе не существует?

Автор: ivg 8.6.2008, 00:11
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#load(java.lang.Class,%20java.io.Serializable) http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#get(java.lang.Class,%20java.io.Serializable). http://www.hibernate.org/hib_docs/v3/api/org/hibernate/ObjectNotFoundException.html

Добавлено через 49 секунд
 smile 

Автор: check 8.6.2008, 10:14
Сорри, я в момент написания предыдущего поста думал о своём и потому забыл прочитать вопрос   smile 

Автор: diablero 8.6.2008, 11:16
Цитата(v2v @  8.6.2008,  00:10 Найти цитируемый пост)
diablero, а объект с указанным ид точно в базе не существует?

точно. Тут дело даже не в том, что он возвращает не null, а почему происходит возврат из метода минуя catch. Я дебагером вижу, что метод load кидает ObjectNotFoundException, и мне как бы по барабану что случилось, мне нужно чтобы мой метод возвращал объект, либо null и больше ничего.

Автор: ivg 8.6.2008, 12:35
diablero, http://www.hibernate.org/hib_docs/v3/api/org/hibernate/ObjectNotFoundException.html.
Цитата(diablero @  8.6.2008,  14:16 Найти цитируемый пост)
а почему происходит возврат из метода минуя catch

Предположу, что метод load() возвращает proxy instance т. е. не null и исключение не генерируется либо ловится и обрабатывается Hibernate'ом. Возможно поэтому в вашем методе вы его поймать не можете. Возможно также, что оно генерируется позже, при обращении к  данным (lazy loading) из другого места в коде. Проверьте этот момент.
 

Автор: diablero 8.6.2008, 15:02
Я отказался от сего необъяснимого и непонятного и перевел все запросы такого типа на Criteria. Так все работает четко.


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)