这个问题一直都没搞清楚
1.比方说我要执行一条sql:update A set name='abc' where id=111 这条sql要不成功要不失败,既然失败了也用不着回滚呀(数据库根本没发生变化呀?),这样也要去加个事务,why?
2.比如说一些查询语句select * from A 这样的为什么在spring里要去配个只读的事务,真是搞不清楚啊,是spring的问题,还是另有意图?
非常感谢大家能帮我解答一下!
这个问题一直都没搞清楚
1.比方说我要执行一条sql:update A set name='abc' where id=111 这条sql要不成功要不失败,既然失败了也用不着回滚呀(数据库根本没发生变化呀?),这样也要去加个事务,why?
2.比如说一些查询语句select * from A 这样的为什么在spring里要去配个只读的事务,真是搞不清楚啊,是spring的问题,还是另有意图?
非常感谢大家能帮我解答一下!
1.假如你在更新数据库的时候,在执行更新的时候还伴随着其他的数据更新,电脑突然断电,而这个时候更新数据的操作正在进行着,数据更新了一半怎么办?这个时候就要用到事务中的回滚,恢复到失败以前的状态。
2.关于只读问题,引用《Spring in Action》里的解释,如果一个事务只对后端数据库执行读操作,数据库就可能利用事务只读特性,使用某些优化措施。通过声明一个事务为只读,你就给了后端数据库一个机会,来应用那些它认为合适的优化措施。
因为只读的优化措施是在事务启动时由后端数据库实施的,所以,只有将那些具有可能启动新事务的传播行为的方法的事务标记成只读才有意义。另外,如果你使用了Hibernate,那么一个只读事务将使Hibernate的flush模式设置为FLUSH_NEVER,告诉Hibernate避免和数据库进行不必要的对象同步,将所有更新延迟到事务的结束。
希望对楼主有帮助