HibernateTemplate回退到自动提交,在哪里?

时间:2014-11-07 13:04:59

标签: java spring hibernate jpa transactions

HibernateTemplate api说:

  

...它有能力回归“自动提交”。在事务之外使用时的样式行为

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/orm/hibernate3/HibernateTemplate.html

任何人都可以指出发生的地方:

https://github.com/

http://grepcode.com

我搜索了一个小时没有成功。我正在寻找在我的应用程序中创建交易的答案,因为据我所知,hibernate要求每次与db的交互都要打开一个事务但是我不打开任何交易我既不使用JTA也不会阅读操作正常。

1 个答案:

答案 0 :(得分:1)

All database statements are executed within the context of a physical transaction,即使我们没有明确声明事务边界(BEGIN / COMMIT / ROLLBACK)。数据完整性由ACID properties of database transactions强制执行。

因此,如果您不在逻辑事务(Spring事务拦截器)的上下文中注册当前的工作单元,那么每个DB语句将在单独的数据库物理事务中执行,因此您将在"自动提交"模式。

  

......它有能力回归“自动提交”。风格行为何时   在交易之外使用

这句话告诉您,您可以在@Transactional上下文中使用TransactionTemplate,甚至也可以不使用事务上下文。因此,您没有义务使用Spring事务划分,尽管for performance reasons you should do so

因此,您的TransactionTemplate相关代码独立于是否具有当前正在运行的事务上下文。

对于普通的JDBC,如果要在单个数据库事务中注册多个语句,则代码必须显式声明事务边界(begin / commit / rollback)。如果你不这样做,你将在"自动提交"模式。