问题描述
service层开启了事务,当事务中有用到find查询的时候,事务被提交了有何配置可设置此种情况否 问题补充:声明:1,采用的是spring管理事务 2,事务被正常切上将flushmode 改成了commit已经解决了我上述问题新问题:采用的hibernate session中 excudeUpdate方法执行修改与删除确不在事务中,被自动提交了
解决方案
看不懂你的在不使用spring的情况下hibernate事物是硬编码也就是setAutoCommit(boolean) 设置是否自动提交事务,默认自动提交设置事物级别 隔离机制commit() 提交事务rollback() 撤销事务通常如果你只查询的话是不需要事物的 看不懂你的什么find后提交了事物你根本没持久化任何数据,要事物有何用?能回滚吗?如果你是save或update的话设置setAutoCommit(false)后 你所有的修改操作都将保存在hibernate一级缓存 修改数据后使用rollback() 数据就不会真正更新到持久层推荐你是用spring事物管理 通过xml或注解都比直接是用hibernate好N倍而且spring事物还支持传播机制 就算你一个请求下来走了N个方法 修改了N个数据 他们都还是在一个事物内 出现异常都能回滚
解决方案二:
service层开启了事务,当事务中有用到find查询的时候,事务被提交了 有何配置可设置此种情况否1、事务切面根本没切上2、用法不对 贴相关代码3、如果用mysql 且MyIASM引擎 无事务
解决方案三:
find查询数据,不需要提交事务吧。事务隔离级别没配置对。
解决方案四:
我错了 脑袋一抽忘了些东西 别误导你了 hibernate一级缓存是用来跑批的 当缓存中存在一定数据的语句时会一次性提交 而事物是由数据库支持的 大多数的数据库都支持事物 有一些专门定位在高速度的不要求时时同步数据的数据库才没有事物
解决方案五:
先把该做的查询查好了,再做增删改
解决方案六:
expression="(execution(* com.acca.service.*.save*(..)) || execution(* com.acca.service.*.update*(..)) || execution(* com.acca.service.*.delete*(..))) and not execution(* com.acca.service.*find*(..))" />