Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 如何在使用容器管理的事务时处理异常_Hibernate_Spring Mvc_Jpa - Fatal编程技术网

Hibernate 如何在使用容器管理的事务时处理异常

Hibernate 如何在使用容器管理的事务时处理异常,hibernate,spring-mvc,jpa,Hibernate,Spring Mvc,Jpa,我的应用程序正在SpringMVC框架上工作,我们需要实现进程和DAO层的异常处理 因此,如果出现任何技术故障,我们需要将响应代码1发送回UI。因此,执行将按以下方式进行 Json控制器->委托层->流程层->服务层->DAO层 我在应用程序中使用JPA将数据持久化到数据库中,并使用容器管理的事务处理。但在DAO层上实现异常处理时,我遇到了以下查询: 即使我在DAO层捕捉到异常,JPA会自动回滚事务吗 我是否应该在serviec层捕获RunTimeException,以便在DAO层出现任何故障时

我的应用程序正在SpringMVC框架上工作,我们需要实现进程和DAO层的异常处理

因此,如果出现任何技术故障,我们需要将响应代码1发送回UI。因此,执行将按以下方式进行

Json控制器->委托层->流程层->服务层->DAO层

我在应用程序中使用JPA将数据持久化到数据库中,并使用容器管理的事务处理。但在DAO层上实现异常处理时,我遇到了以下查询:

  • 即使我在DAO层捕捉到异常,JPA会自动回滚事务吗

  • 我是否应该在serviec层捕获RunTimeException,以便在DAO层出现任何故障时,我只能在服务层设置响应代码1

  • 我是否需要使用@Transactional注释,因为我已经用@Repository注释了我的DAO类

  • 即使我在DAO层捕捉到异常,JPA会自动回滚事务吗

    不,不会的。在spring捕获异常之前,应该对异常进行编程。要做到这一点,您必须重新调用异常,然后spring将捕获它并执行其工作

    看看@Transactional文档

    我是否应该在服务层捕获RunTimeException,以便在DAO层出现任何故障时,我只能在服务层设置响应代码1

    对。使用@ControllerAdvice,您可以设置对UI的正确响应。例如:重新播放MovieServiceException,然后使用@ExceptionHandler捕捉它并返回正确的响应

    我是否需要使用@Transactional注释,因为我已经用@Repository注释了我的DAO类

    您应该在服务层中使用@Transactional,因为仅仅设置@Repository是行不通的。如果您使用的是SpringDataJPA,您可以使用@Transactional,也可以不使用@Transactional,这取决于您的情况

    更新


    我从DAO层抛出异常,但唯一不同的是,我没有抛出原始异常,而是用我的应用程序异常类包装JPA异常,并将其抛出回服务层。那么回滚操作在这种情况下也会起作用吗

    文档说明:默认情况下,事务将在RuntimeException和Error上回滚,但不会在选中的异常(业务异常)上回滚

    (我见过有人设置@Transactional(rollboor=Exception.class),所以第二种情况下可以这样做)

    您能解释一下为什么我们在使用Spring JPA数据时不需要@Transactional注释吗?为什么我们在其他情况下需要它


    很简单,这是默认行为。您可以在

    上了解更多信息,我从DAO层抛出异常,但唯一不同的是,我没有抛出原始异常,但我确实用我的应用程序异常类包装了JPA异常,并将其抛出回服务层。那么,回滚操作在这种情况下也会起作用吗?您能解释一下为什么在处理Spring JPA数据时不需要@Transactional注释吗?为什么我们在其他情况下需要它?