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

| 我使用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)最后,谁负责交易管理?春天或MySQL或两者兼而有之? 谢谢回答! :-)     
已邀请:
  1)mySQL Server本身指定事务处理方式是否正确?这意味着它决定何时需要锁定记录? 从本质上讲-是的,执行事务是DBMS的责任   2),3)...
readOnly
与事务无关,这是对Hibernate的提示,它表示Hibernate不应将对加载的对象所做的更改传播到数据库(即,如果您的事务不是,则可以将其指定为性能提示)打算将更改写入数据库)   4)什么时候提交?交易成功后或会话关闭时? 提交是终止事务的操作(另一种操作是回滚),因此它在事务结束时发生。   5)休眠会话何时开始?每个会话(服务器和客户端之间)还是每个事务? 默认情况下-对于每个事务,除非您在View支持中配置了Open Session。   6)最后,谁负责交易管理?春天或MySQL或两者兼而有之? 数据库提供事务行为的实现。 Spring通过定义事务边界并触发提交/回滚来管理事务。     

要回复问题请先登录注册