nan*_*no7 3 mysql spring innodb hibernate transactions
我正在使用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时,没有锁定datarecord,当readOnly = false时,所有使用过的数据线都被锁定了吗?
3)当readOnly = true并且我读取各种数据记录时会发生什么.让我们假设在读取过程中它们被另一个事务更改,因此我得到一些旧记录和一些新记录.那可能吗?
4)何时发生提交?成功交易或会话结束后?
5)什么时候开始hibernate会话?每个会话(服务器和客户端之间)或每个事务?
6)到底谁负责交易管理?spring或mysql还是两者兼而有之?
谢谢回答!:-)
1)是否正确,mySQL Server本身指定了如何处理事务?这意味着它决定何时需要锁定记录?
在本质上 - 是的,交易的实施是DBMS的责任
2),3)......
readOnly 与事务无关,它是Hibernate的一个暗示,它说Hibernate不应该将对加载的对象所做的更改传播到数据库(即,如果您的事务不是要将更改写入,则可以将其指定为性能提示数据库)
4)何时发生提交?成功交易或会话结束后?
Commit是一个终止事务的动作(另一个这样的动作是回滚),因此它发生在事务结束时.
5)什么时候开始hibernate会话?每个会话(服务器和客户端之间)或每个事务?
默认情况下 - 对于每个事务,除非您在View支持中配置了Open Session.
6)到底谁负责交易管理?spring或mysql还是两者兼而有之?
数据库提供事务行为的实现.Spring通过定义边界并触发提交/回滚来管理事务.
| 归档时间: |
|
| 查看次数: |
2014 次 |
| 最近记录: |