【问题标题】:Correct way to handle exception in hibernate/jpa and JUnit5在 hibernate/jpa 和 JUnit5 中处理异常的正确方法
【发布时间】:2017-11-28 23:10:06
【问题描述】:

我想知道,当我尝试在数据库中创建和持久化对象时,处理异常的最佳方法。

所以我有一个名为 Rule 的表,其中包含 getter 和 setter:

    @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. 如果我将一个 null 元素(设置为 nullable = false)传递给方法 create 如何传输错误或异常(通过 hibernate/jpa 或者我应该像往常一样自己处理?)

如果您有任何其他建议,请告诉我!

提前感谢您的帮助。

【问题讨论】:

    标签: java hibernate jpa junit5


    【解决方案1】:

    【讨论】:

    • 谢谢,但我还有更多问题!在我的示例中,可以引发 3 个例外。我了解到使用特定异常更相关,因此我正在考虑使用其他方法并给出引发异常的表的名称和异常e。在里面我将使用instanceof 抛出带有相关消息的好异常。所以在事务方法中我只是用参数调用方法。就设计模式和性能而言,这是一个好方法吗?如果是,我应该将此方法移到与我的数据库描述包不同的包中吗?
    • 是的,你可以做到。使用 instanceof 关键字查找特定异常并对其进行处理也是一种很好的做法。我相信您正在使用单一方法来处理所有 3 个异常。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多