Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, не ловиться исключение, Не понятное очевидное 
V
    Опции темы
diablero
Дата 7.6.2008, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Собственно сабж.
Код мне казался настолько очевидным, что я его даже не проверял. А когда это обнаружилось, то поставило меня в тупик. 
Если нет указанного 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;
        }
    }



--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
check
Дата 7.6.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



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


Это сообщение отредактировал(а) check - 7.6.2008, 22:31
PM MAIL   Вверх
v2v
Дата 8.6.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1620
Регистрация: 20.9.2006
Где: Киев

Репутация: 9
Всего: 56



по доках, он не нулл возвращает, а бросает HibernateException.

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


--------------------
PM   Вверх
ivg
Дата 8.6.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



JavaDoc смотритеЫ?

Добавлено через 49 секунд
 smile 
PM MAIL   Вверх
check
Дата 8.6.2008, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 610
Регистрация: 3.4.2006

Репутация: 2
Всего: 23



Сорри, я в момент написания предыдущего поста думал о своём и потому забыл прочитать вопрос   smile 
PM MAIL   Вверх
diablero
Дата 8.6.2008, 11:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



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

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


Это сообщение отредактировал(а) diablero - 8.6.2008, 11:40


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
ivg
Дата 8.6.2008, 12:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


Профиль
Группа: Участник
Сообщений: 686
Регистрация: 8.2.2006
Где: Екатеринбург

Репутация: 32
Всего: 81



diableroне читали?.
Цитата(diablero @  8.6.2008,  14:16 Найти цитируемый пост)
а почему происходит возврат из метода минуя catch

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

Это сообщение отредактировал(а) ivg - 8.6.2008, 12:41
PM MAIL   Вверх
diablero
Дата 8.6.2008, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

Репутация: 2
Всего: 5



Я отказался от сего необъяснимого и непонятного и перевел все запросы такого типа на Criteria. Так все работает четко.




--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0708 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.