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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JPA Spring хендлить иксепшины, иксепшины JPA, Spring 
V
    Опции темы
Andy_L20066
Дата 28.3.2010, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



привет, есть такой вопрос: 

апликация моя состоит из Spring 3.0, JPA, есть соответсвенно Service layer который дергает DAO клас. При старте апликухе хочу проверить существует ли юзер с определенным именем, если не существует - то создать... и тут вот как раз вопрос: 
код для того чтоб найти юзера на уровне сервиса: 
Код

@Transactional(readOnly = true)
   public User findUserByName(String name){
       return getUserDAO().findByName(name);
   }


на уровне DAO: 
Код

 public User findByName(String name) {
        Query query = getEntityManager().createQuery("FROM User user WHERE user.username = :username");
        query.setParameter("username", name);
        return (User) query.getSingleResult();
    }

строка(User) query.getSingleResult(); выкидивает иксепшин No entity found и соответственно все заваливается...
иксепшин: 
Код

Caused by: org.springframework.dao.EmptyResultDataAccessException: No entity found for query
    at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:295)
    at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.translateExceptionIfPossible(AbstractEntityManagerFactoryBean.java:350)


Иксепшины по сути транслируются в cпринговские благодаря конфигурации: 
Код

   <context:annotation-config/>
     
   <bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor"/>


и я на стороне сервиса могу написать следующее: 
Код

@Transactional(readOnly = true)
   public User findUserByName(String name){
       User foundedUser = null;
       try {
           foundedUser = getUserDAO().findByName(name);
       } catch (org.springframework.dao.EmptyResultDataAccessException ex) {
           System.out.println("No Object found");
       }
       return foundedUser;
   }


Правильно ли я хендлю иксепшины в таком случае или можно как то иначе?
PM MAIL ICQ   Вверх
MisterCleric
Дата 29.3.2010, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1043
Регистрация: 16.2.2006
Где: Харьков, Украина

Репутация: 33
Всего: 38



Привет, твой вопрос заключается в том, можно ли так делать, и в том, что у тебя все-равно вылетает Exception?
Проблема заключается в том, что EmptyResultDataAccessException является RuntimeException, что говорит о том, что ты никак не сможешь его перехватить о чем и говорится в JavaDoc:
Код

* <p>As this class is a runtime exception, there is no need for user code
 * to catch it or subclasses if any error is to be considered fatal
 * (the usual case).
public abstract class DataAccessException extends NestedRuntimeException {
....
}




--------------------
ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ...
PM MAIL ICQ   Вверх
Andy_L20066
Дата 29.3.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 1



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

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

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


 




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


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

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