3.9事务


3.9.1默认的事务

EMAP默认的事务处理方式如下:

在第一次更新操作执行时开启事务,此事务一直到当前控制器执行结束。然后,根据是否有异常抛出,来确定是提交或回滚。

对于查询操作,如果在未开启事务时,则会在无事务的情况下进行查询。如果已开启了事务,则会在这个事务中进行查询。

3.9.2声明式事务

声明式的事务采用与spring相同的标注“@Transactional”,如:

@Transactional

public void doXXX()

其工作方式也与spring的相同。

3.9.3两种事务的混合

已定义了声明式事务的方法如下:

@Transactional

doMyUpdate() {

}

情况1:

doSomeUpdate();

doMyUpdate();

由于先执行了更新操作,事务已开启,“doMyUpdate”方法调用时将加入这个事务,此方法结束时事务不会结束,需等到控制器执行结束。

情况2:

doMyUpdate();

doSomeUpdate();

“doMyUpdate”方法会在单独的事务中,方法结束事务也结束,后面的更新操作将重新开启另一个事务。

情况3:

doSomeUpdate();

try {

doMyUpdate();

}

catch…

由于先执行了更新操作,事务已开启,“doMyUpdate”方法调用时将加入这个事务,如果有异常被捕获但未继续抛出,则最后控制器执行结束将提交事务而不是回滚。

这与情况1类似,只是多了个异常的捕获且未继续抛出。如果“doMyUpdate”前没有执行更新操作,那么此方法会在单独的事务中,方法外的异常捕获不会影响事务的提交或回滚。

results matching ""

    No results matching ""