Правильный способ обработки исключений в hibernate/jpa и JUnit5

Я хотел бы знать, как лучше всего обрабатывать исключение, когда я пытаюсь создать и сохранить объект в базе данных.

Итак, у меня есть таблица с именем Rule с геттерами и сеттерами:

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id")
    private int id;

    @Column(name = "type", nullable = false, unique = true)
    private String type;

    @Column(name = "hint", nullable = false)
    private String hint;

    @Column(name = "help", nullable = false)
    private String help;

    @Enumerated(EnumType.STRING)
    @Column(name = "language", nullable = false)
    private Language language;

    @OneToMany(mappedBy = "rule")
    @Column(name = "user_rule")
    private Set<UserRule> user_rule;

    @OneToMany
    @JoinColumn(name = "rule_id")
    private Set<Sentence> sentence;

И у меня есть метод create, который добавляет объект в базу данных:

 public static Rule create(EntityManagerFactory factory, String type, String hint, String help, Language language) {
            EntityManager em = factory.createEntityManager();
            EntityTransaction transaction = null;
            Rule new_rule = new Rule();

            try {
                transaction = em.getTransaction();
                transaction.begin();

                new_rule.setType(type);
                new_rule.setHint(hint);
                new_rule.setHelp(help);
                new_rule.setLanguage(language);

                em.persist(new_rule);
                transaction.commit();
            } catch (Exception ex) {
            if (transaction != null) {
                transaction.rollback();
            }
            throw ex;

            } finally {
                em.close();
            }

            return new_rule;
    }
  1. Должен ли я использовать несколько catch для каждого исключения, методы которого могут вызывать блок try?
  2. Если мое решение - хороший способ справиться с этим, как я могу напечатать конкретное сообщение, связанное с исключением ex, в хорошем смысле?
  3. Как я могу вызвать исключение в моем JUnit5 для содержимого блока try, чтобы проверить, возникает ли исключение (должен ли я вызывать все исключения?)
  4. Если я передам нулевой элемент (который был установлен в nullable = false) методу create, как передаются ошибки или исключения (с помощью hibernate/jpa или я должен обрабатывать это самостоятельно, как обычно?)

Дайте мне знать, если у вас есть другие советы!

Заранее спасибо за вашу помощь.


person Iraponti    schedule 28.11.2017    source источник


Ответы (1)


Возможно, приведенные ниже ссылки дадут вам лучший механизм обработки исключений.

https://examples.javacodegeeks.com/enterprise-java/hibernate/hibernate-exception-handling-example/

https://blog.takipi.com/5-common-hibernate-exceptions-and-how-to-fix-them/

person Ramesh Fadatare    schedule 29.11.2017
comment
Спасибо, но у меня есть еще вопросы! В моем примере может быть возбуждено 3 исключения. Я узнал, что более уместно использовать конкретные исключения, поэтому я подумал использовать другой метод и указать имя таблицы, в которой возникает исключение, и исключение e. Внутри я буду использовать instanceof для создания хорошего исключения с соответствующим сообщением. Поэтому в транзакционном методе я просто вызываю метод с аргументами. Это хороший способ с точки зрения шаблона проектирования и производительности? Если да, следует ли переместить этот метод в другой пакет из моего пакета описания базы данных? - person Iraponti; 29.11.2017
comment
Да, ты можешь сделать это. Также рекомендуется использовать ключевое слово instanceof, чтобы найти конкретное исключение и обработать его. Я полагаю, что вы используете один метод для обработки всех трех исключений. - person Ramesh Fadatare; 07.12.2017