当前位置: 首页 > 知识库问答 >
问题:

在hibernate/jpa和JUnit5中处理异常的正确方法

彭衡
2023-03-14

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

因此,我有一个名为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. 如果我的解决方案是处理异常的好方法,那么如何才能以好的方式打印与异常相关的特定消息
  3. 如何在JUnit5中为try块的内容引发异常,以测试是否引发了异常(我应该引发所有异常吗?)
  4. 如果我将null元素(设置为nullable=false)传递给方法create如何传输错误或异常(通过hibernate/jpa,或者我应该像往常一样自己处理它?)

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

提前感谢你的帮助。

共有1个答案

苏浩瀚
2023-03-14

可能下面的链接会给你最好的异常处理机制。

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

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

 类似资料:
  • 本文向大家介绍Java中断异常的正确处理方法,包括了Java中断异常的正确处理方法的使用技巧和注意事项,需要的朋友参考一下 处理InterruptedException 这个故事可能很熟悉:你正在写一个测试程序,你需要暂停某个线程一段时间,所以你调用 Thread.sleep()。然后编译器或 IDE 就会抱怨说 InterruptedException 没有抛出声明或捕获。什么是 Interru

  • 假设我有一个类Person,具有不同数据类型的不同属性,我在我的主方法中有这样的代码: 现在,假设高度的赋值引发了一个异常,例如InvalidCastException,代码将停止执行,并且可能会记录一些东西,以防我有一个记录表。问题是,从日志中,我无法确切地理解哪一行和赋值抛出了异常。 是否有任何方法可以捕获异常,并能够记录(数据库中的某个位置)哪个赋值引发异常,以及在这种情况下针对哪种类型的强

  • 我使用JPA和Hibernate作为容器管理事务的提供者(JBossAS 6.1.0.Final)。 我正在尝试实现一些细粒度的异常处理,因为我的应用程序上有一个特定的异常层次结构,所以我可以定义在任何情况下要做什么。因此,我已经研究了几个小时,发现文档很模糊,示例也有些原始,因为“为了清晰起见”总是忽略异常处理,或者是一个简单的try-catch块,用于处理异常e。 例如,采用以下代码: cat

  • 问题内容: 我一直在概念上为我的项目决定异常处理结构。 假设您有一个示例: 还有两个子类FileData和StaticData,它们从某些指定的文件中读取数据,StaticData仅返回一些预定义的常量数据。 现在,在读取文件时,可能会在FileData中引发IOException,但是StaticData将永远不会抛出。大多数样式指南建议在调用堆栈上传播Exception,直到有足够的上下文可以

  • 我正在开发一个具有DAO、服务、控制器和视图层的Spring web应用程序。JPA用于数据库访问。我用于JPA异常处理的方法如下所示。 我想在异常中获得更多信息,这就是创建自定义DBException的原因,也不想将PersistenceException传播到其他层。 我正在捕获并重新抛出。由于是一个,我认为spring事务在发生异常时应该回滚? 多谢了。

  • 首先,我是iOS和Swift的新手,来自Android/Java编程的背景。因此,对我来说,在空间不足、文件权限问题或其他任何可能发生在文件上的情况下(根据我的经验,已经发生过),捕捉试图写入文件时的异常是第二天性。我也明白在Swift中,异常不同于Android/Java的异常,所以这不是我在这里要问的。 我试图使用NSFileHandle追加到一个文件中,如下所示: 但是,和函数都指示它们抛出