spring、hibernate事务

来源:互联网 发布:淘宝店铺怎么转 编辑:程序博客网 时间:2024/06/06 05:26

使用hibernate,不显示开启事务,autocommit为false,期待程序中显示的提交事务。

1、使用hibernate,不显示开启事务,在配置文件中设置autocommit为true,程序中显示调用session.flush(),可以执行更新操作

2、使用hibernate,不显示开启事务,程序中设置autocommit为true,,程序中显示调用session.flush(),不可以执行更新操作

3、使用hibernate,显示开启事务可以执行读操作和更新操作,不需要显示调用session.flush(),因为commit会自动调用session.flush()

其实,更新操作都是在事务中执行的,如果不显示的开启事务,那么每个更新语句都会在单独的事务中执行。

如果显示的开启事务,就会把几个更新操作合并到一个事务中执行。

设置了autocommit为true以后,更新操作也是在单独的事务中的,只是该事务会自动提交。

spring和hibernate整合后,如果不进行声明式事务配置,spring是不会开启一个默认事务的。autocommit是为true的,也就是自动提交事务。

如果进行了声明时事务配置,那么autocommit是false,事务会由spring负责提交。

spring中配置了openSessionInView拦截器以后,会开启session并将其FlushMode设置为MANUAL,而使用hibernateTemple的update方法时,spring会检查FlushMode的级别是否低于COMMIT,如果低于就抛出异常。

参考:http://blog.csdn.net/maggiehexu/article/details/6886599
原创粉丝点击