当前位置: 首页 > 知识库问答 >
问题:

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

厍浩广
2023-03-14

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个答案

段干河
2023-03-14

所有数据库语句都在物理事务的上下文中执行,即使我们没有显式声明事务边界(BEGIN/COMMIT/ROLLBACK)。数据完整性由数据库事务的ACID属性强制执行。

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

…当在事务之外使用时,它能够退回到“自动提交”风格的行为

这个短语告诉您,您可以从@Transactional上下文中使用 TransactionTemplate,甚至可以在没有事务上下文的情况下使用 TransactionTemplate。因此,您没有义务使用Spring事务分界,尽管出于性能原因,您应该这样做。

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

使用普通的JDBC,如果您想在单个数据库事务中注册多个语句,您的代码必须显式声明事务边界(开始/提交/回滚)。如果您不这样做,您将在“自动提交”模式下运行。

 类似资料:
  • 问题内容: 如何设置初始化我的Flask应用程序以将Flask-SQLAlchemy设置为自动提交模式,除非我明确地不使用事务? 会话“ 开始通信后即开始数据库事务 ”。这是否会影响Postgres的难度比MySQL? 通过Instagram, 自动提交模式;在这种模式下,Psycopg2不会对任何查询发出BEGIN / COMMIT;相反,每个查询都在其自己的单语句事务中运行。这对于不需要事务语

  • 问题内容: 我发现自己在sqlalchemy中重复了很多这样的事情,我想知道处理它的最佳方法是什么? 问题答案: 从我的工作代码(会话注册表包装器的一种方法)来看,这是正确的。 它是这样使用的: 要么: 实现:

  • 我们正在尝试从Spring 2.5.2升级到4.0.5. RELEASE,但发现Spring的事务管理不再起作用。 在我们的生产应用程序中,所有数据库操作都通过一个标有@Transactional注释的Spring bean(使用默认设置)。几年来,这一直按预期工作,如果在事务边界内抛出RuntimeException,就会发生回滚。然而,当我们升级到Spring 4.0.5时。释放时,它的作用相

  • 本文向大家介绍触发form表单自动提交的方式有哪些?相关面试题,主要包含被问及触发form表单自动提交的方式有哪些?时的应答技巧和注意事项,需要的朋友参考一下 两种 > 两者都应该在 标签下

  • 这是我的第一篇文章,所以我真的必须挠头,因为这里的资源非常好。 SpringMVC 4.2.5。hibernate-core-5.1.0 JDK8 我遇到了一个问题,当离开一个被调用的@Transactional方法时,事务没有回滚。我调用的方法具有适当的设置: 该方法调用dao对象,假设我们保存了大约8个对象(“到数据库”),例如: 对于典型的刀来说,它只是做一些类似的事情: 首先,我从普通PO

  • 问题内容: 我最近一直在使用sqlite4java库。我想我已经弄清楚了。唯一令我困扰的是,我不知道如何使用该库关闭自动提交。谁能帮忙吗?一个代码示例将不胜感激。 在此先感谢Boro 问题答案: Jefromi和king_nak是正确的-您只需要发出开始和结束事务的SQL语句即可。