什么是简单解释或示例中的交易?即使阅读docs,我也完全不理解。如果我放transactional = true
,我可以回滚,如果有任何错误,否则,如果transactional = false
,意味着我无法回滚?
答案 0 :(得分:7)
使用示例解释Transaction的概念。
仅供参考:默认情况下,所有服务都是交易性的,这意味着所有服务 默认情况下,所有服务中的方法也是事务性的。但如果 你添加了事务= true / false 你违反了约定 您必须标记每个方法事务 根据需要进行交易
因此,假设您有一个方法可以调用另外五种方法:
void methodName(){
task1()
task2()
task3()
task4()
task5()
}
我用以下方法绘制了上述方法:
现在假设当你调用上面的方法时,执行前三个任务就可以了。
现在该方法如下图所示:
如果该方法是事务性的并且在执行第三个任务后发生了一些恶意,那么所做的就是回滚:
但是,如果该方法不是事务性的,并且在执行第三个任务后发生了一些恶意,那么所有已经完成的工作将被提交:
现在只是从wiki总结数据库上下文中的事务性意义:
在原子事务中,一系列数据库操作全部 发生,或什么也没发生。
答案 1 :(得分:3)
事务是一种全有或全无的方法,其目的在于通过其ACID(原子性,一致性,隔离性和持久性)属性来维护数据库完整性。
让我快速浏览一下:
(再次感谢Wikipedia!)
当transactional
属性设置为true
时,Grails会创建一个Spring代理,它包装每个方法调用并提供事务管理。
总而言之,您是对的,从某种意义上说,如果发生错误,将保留ACID属性,并且事务块中的整个操作将回滚到先前的一致状态。
答案 2 :(得分:1)