【发布时间】:2011-08-04 18:11:54
【问题描述】:
我正在使用 Spring Framework 3 和 Hibernate 3.6 开发 Web 应用程序,并尝试了解事务管理的工作原理。 我将 mySQL Server 5.1 与 InnoDB 表一起使用。我基于普通的 Hibernate 3 API 编写了我的 DAO。
1) 是否正确,mySQL Server 本身指定如何处理事务?这意味着它决定何时需要锁定记录?
2) 当我在 spring 中将方法声明为 @transactional(readOnly=true) 或 @transactional(readOnly=false) 时,如果数据记录在事务期间被锁定,这会影响吗?也就是说,当 readOnly=true 时,没有数据记录被锁定,而当 readOnly=false 时,所有使用的数据记录都被锁定?
3) 当我得到 readOnly=true 并读取各种数据记录时会发生什么。让我们假设在阅读过程中它们被另一个事务更改,所以我得到一些旧记录和一些新记录。这可能吗?
4) 什么时候提交?交易成功后或会话关闭时?
5)休眠会话何时开始?每个会话(服务器和客户端之间)还是每个事务?
6)到底谁来负责事务管理? spring 或 mysql 或两者兼而有之?
感谢您的回答! :-)
【问题讨论】:
标签: mysql hibernate spring transactions innodb