使用Spring,Hibernate和mySQL进行事务管理

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还是两者兼而有之?

谢谢回答!:-)

axt*_*avt 5

1)是否正确,mySQL Server本身指定了如何处理事务?这意味着它决定何时需要锁定记录?

在本质上 - 是的,交易的实施是DBMS的责任

2),3)......

readOnly 与事务无关,它是Hibernate的一个暗示,它说Hibernate不应该将对加载的对象所做的更改传播到数据库(即,如果您的事务不是要将更改写入,则可以将其指定为性能提示数据库)

4)何时发生提交?成功交易或会话结束后?

Commit是一个终止事务的动作(另一个这样的动作是回滚),因此它发生在事务结束时.

5)什么时候开始hibernate会话?每个会话(服务器和客户端之间)或每个事务?

默认情况下 - 对于每个事务,除非您在View支持中配置了Open Session.

6)到底谁负责交易管理?spring或mysql还是两者兼而有之?

数据库提供事务行为的实现.Spring通过定义边界并触发提交/回滚来管理事务.