在上面的代码中,我将hibernate与mysql一起使用,hibernate会话由SpringSessionContext管理(在事务边界下使用SessionFactory.CurrentSession类)
下面的镜像(dao层)是直接的用例,但是异常没有回滚,我从简单的服务层调用这个方法(即服务层调用dao层进行CRUD操作),我了解了spring在事务管理上的代理机制,在这种情况下,下面的镜像类是dao接口的实现,所以spring将使用Jdkdynamic proxy创建一个代理bean,这个方法从服务层调用(非事务性类,但是期望数据不应该被持久化,但是异常应该回滚,但是它被持久化在db中)
Hibernate在整个事务过程完成后会持久化脏对象。您应该检查第一个输入方法到最后一个方法流。调用save函数时不处理Hibernate持久化操作。它存储到一个缓冲区映射中,事务完成后,将对其进行处理。您的流中是否有任何事务或try-catch块?
问题是即使抛出了未检查的异常,methodC()也不会回滚。
我在一家spring boot hibernate JPA个人项目书店工作。我面临一个问题,即使用@Transactional注释注释的方法即使在运行时异常的情况下也无法回滚事务。我使用的是spring boot版本1.5.1、hibernate版本5、java版本11 下面是bean配置文件代码: 下面是BooK模型文件代码 下面是商店型号代码 下面是BookDaoImpl代码 下面是Store
尽管捕获了RuntimeException并声明了noRollbackFor属性,但事务总是回滚。有什么解释吗?? 日志跟踪信息:
这很好,但并不总是在代码中抛出运行时异常。因此,我挖掘并发现如下所示的rollbackFor; 现在,我必须更改所有代码,以使用RollBackfor更改@Transactional。但是还有其他方法可以将所有@transaction advice属性更改为rollbackFor=exception.class吗?
在上面的代码中,ConstraintViolationException发生在saveTicket()方法内,saveTicket()内的dao甚至在捕获异常之前就已经回滚了它的事务(这是我所知道的),第一个没有回滚,因为它在另一个事务中。(这是我已经知道的行为)。 当我使用另一个事务性方法调用这两个预览方法(updateRequest()和saveTicket()),当saveTicket()方