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

Spring WebApp中的JPA异常处理

孔志强
2023-03-14

我正在开发一个具有DAO、服务、控制器和视图层的Spring web应用程序。JPA用于数据库访问。我用于JPA异常处理的方法如下所示。

public class DBException extends RuntimeException {
   implemented constructors to call appropriate RuntimeException constructors.
}

public MyDAOClass {
   public void save(Object object) {
       try {
           entityManager.persist(object);
       }catch(PersistenceException e) {
           throw new DBException("Error occurred in save", e);
       }
   }
}

public class MyServiceClass {
    public void serviceMethod() {
        dao.save(object);
    }
}

public class MyRestController {
    public void controllerMethod() {
        service.save();
    }
    @ExceptionHandler(DBException.class)
    public String handleDBException(DBException e, HttpServletRequest req) {
        implemented code to log & handle exception.
    }

}

我想在异常中获得更多信息,这就是创建自定义DBException的原因,也不想将PersistenceException传播到其他层。

我正在捕获persistenceexception并重新抛出dbexception。由于dbexception是一个runtimeexception,我认为spring事务在发生异常时应该回滚?

多谢了。

共有1个答案

盖高畅
2023-03-14

这是处理异常的正确方法吗?

是的,您不应该将特定于层的异常传播到它上面的层。如果您希望数据层的客户端从异常中恢复过来,那么创建一个新的自定义检查异常,并从save方法中的catch块抛出它。

我应该在所有层记录异常还是在控制器的末尾记录它是好的?

有关异常处理最佳实践的更多信息,请参阅此处

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

  • 问题内容: 我有一个ScheduledThreadPoolExecutor,似乎正在吃异常。如果提交的Runnable引发异常,我希望我的执行者服务通知我。 例如,我希望下面的代码至少输出IndexArrayOutOfBoundsException的stackTrace 作为附带问题。有没有办法为ScheduledThreadPoolExecutor编写常规try catch块? ////////

  • 本文向大家介绍Java 中的异常处理?相关面试题,主要包含被问及Java 中的异常处理?时的应答技巧和注意事项,需要的朋友参考一下  Java异常类层次结构图 在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 Throwable类。Throwable: 有两个重要的子类:Exception(异常) 和 Error(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大

  • 我创建了简单的MailService来通过电子邮件发送内容。它工作但我不知道如何处理异常(我的想法是在HTML视图中打印一些信息或在404页重定向) 邮件服务: 在控制器中的用法:

  • 我需要在我的应用程序中将异常显示为toast消息,但以下代码不起作用,我如何修改它? 10-14 23:41:21.637 14498-14498/com.example.username.weddingplanningE/SQLiteDatabase︰错误插入name=dandroid.database.sqlite.SQLiteConstraintExc0019:列名称不是唯一的(代码19)在

  • 我想知道,当我试图在数据库中创建并持久化对象时,处理异常的最佳方法。 因此,我有一个名为Rule的表,其中包含getter和setter: 我有一个方法create谁在数据库中添加对象: 我应该为每个异常使用多个catch吗?谁的方法可以抛出try块 如果我的解决方案是处理异常的好方法,那么如何才能以好的方式打印与异常相关的特定消息 如何在JUnit5中为块的内容引发异常,以测试是否引发了异常(我