Как лечить исключения в спящем режиме? - PullRequest
4 голосов
/ 02 апреля 2011

Я использую hibernate, и похоже на большинство моих методов:

public boolean insertUser(User user) {
    Session session = HibernateUtil.getSessionFactory().openSession();
    try {
        session.beginTransaction();
        session.save(user);
        session.getTransaction().commit();
    } catch (HibernateException he) {
        session.getTransaction().rollback();
        return false;
    } finally {
        if (session != null) {
            session.close();
        }
    }

    return true;
}

Но я бы хотел лучше относиться к исключениям, чтобы дать пользователю более качественное сообщение, например: когда у меня в таблице есть дубликат ключа и т. Д.

Что вы, ребята, рекомендуете?

С уважением, Вальтер Энрике.

Ответы [ 2 ]

2 голосов
/ 02 апреля 2011
  • что бы вы ни делали, не глотайте исключения.В своем коде вы никогда не узнаете, что является исключением.Так что бросьте это / обертку.И зарегистрируйте его где-нибудь (возможно, не обязательно в приведенном выше коде)

  • сделать общий обработчик исключений в веб-слое - это может быть Filter или страница ошибки 404настройте его в web.xml).И показывать одно и то же сообщение пользователям независимо от исключения.Пользователям все равно, пропущенный столбец или неправильный тип данных.Дайте им приятное сообщение о том, что вы сожалеете, и вы будете расследовать.

  • также рассмотрите возможность декларативной обработки транзакций, как это предлагается весной.

1 голос
/ 02 апреля 2011

Вместо того, чтобы возвращать true или false, вы можете создать свое собственное бизнес-исключение (вероятно, иерархия по RuntimeException, которая имеет смысл для вашей проблемы).

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

Обратите внимание, что для этого конкретного метода, который вы представляете, было бы лучше сначала запросить в базе данных наличие ключа и вызвать исключение UserAlreadyExistsException (или что-то еще).

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