有关Grails的事务

1. Grails2.4自动生成的Controller会为类加上只读事务的注解,如下:

@Transactional(readOnly = true)

class Domain1Controller {
...

这会导致连接事务型数据库(如MySQL)进行读写操作的方法必须显示的加上开启读写事务(缺省为读写)的声明,否则会报异常:Connection is read-only. Queries leading to data modification are not allowed

@Transactional
def save(Domain1 domain1Instance) {
...

给类加事务声明会强制新增的每个方法使用事务,不想使用事务只能把类声明处的@Transactional注解删除。


2. Grails2.4自动生成的Service也加了事务声明,但缺省是读写的,如下:

@Transactional
class Domain1Service {
...

3. Grails2.4的Service中有两个方法save1和save2,save1中调用了save2。如果save1声明为只读事务,即使save2声明为读写事务,也会导致异常:Connection is read-only. Queries leading to data modification are not allowed。

同样的,controller中某声明为只读事务的方法,调用声明为读写事务的service1.save2,也会导致只读连接不允许写的异常。

这说明事务状态以最初的入口函数为准。


4. 都知道的如果需要回滚,必须人工抛出RuntimeException,而不是其他类型的异常。


5. 事务内发生的任何数据库操作,即使调用了flush:true,也不会立即写入数据库。只有当事务被提交的时候(并且flush?)才会被写入数据库。


6. 待续




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值