getCurrentSession 在网络中休眠

2024-05-14

我正在使用 hibernate 和 jsp/servlet 编写一个基于 Web 的应用程序。我读过有关sessionFactory.getCurrentSession and sessionFactory.openSession方法。我知道它们之间的基本区别(使用getCurrentSession您不必关闭连接,当您提交事务时,您的会话将自动关闭)。根据我的理解,我们应该选择getCurrentSession并通过每个请求的会话来完成。

让我们考虑以下场景:

  1. 方法A调用getCurrentSession并获取当前会话
  2. 在方法 A 中,使用步骤 1 中的会话启动事务
  3. 方法A调用方法B,方法B也有getCurrentSession并开始交易
  4. 方法 B 提交其事务
  5. 控制返回到方法 A 并且它还提交事务

现在我的问题是

  1. 步骤 1 和步骤 3 中找到的会话是否是同一个会话?
  2. 如果问题 1 的答案是肯定的,那么它将如何处理步骤 4 中的提交?理想情况下,它应该自行关闭会话,并在第 5 步抛出异常。
  3. 如果问题1的答案是否定的,那么您如何处理这种情况?

步骤 1 和步骤 3 中找到的会话是否是同一个会话?

它们应该是相同的,这在某种程度上是合同的一部分getCurrentSession()你会得到Session只要工作单元尚未完成(即事务已提交或回滚),就绑定到线程。Java 与 Hibernate 的持久性是这样说的(第 481 页):

所有调用的数据访问代码getCurrentSession()关于全球共享SessionFactory获得相同的电流Session— 如果它被调用在 同一个线程。工作单元完成时Transaction已提交(或回滚)。 Hibernate 还会刷新并关闭当前的Session及其持久化上下文(如果您提交或回滚事务)。这里的含义是调用getCurrentSession()提交或回滚后产生新的Session和一个新的持久性上下文。

您可能还想阅读 javadoc 的内容Session#beginTransaction() http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/Session.html#beginTransaction() says.

如果问题 1 的答案是肯定的,那么它将如何处理步骤 4 中的提交。理想情况下,它应该自行关闭会话,并在步骤 5 中给出错误。

第4步应该没有问题,Session将被冲洗,Transaction将致力于并Session关闭。但我预计第 5 步会失败TransactionException http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/TransactionException.html(这是我的赌注)。但让我引用javadocTransaction http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/Transaction.html:

事务与会话相关联,通常通过调用来实例化Session.beginTransaction()。单个会话可能跨越多个事务,因为会话的概念(应用程序和数据存储之间的对话)的粒度比事务的概念更粗。然而,任何时候最多有一个未提交的事务与特定会话相关.

正如上面所强调的,我们正在讨论一些不应该发生的事情(即设计问题)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

getCurrentSession 在网络中休眠 的相关文章

  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 单元测试组合服务方法

    我正在为一个类编写 junit 单元测试 该类使用以下方法实现公开的接口 public Set
  • 在 Java 中从 SOAPMessage 获取原始 XML

    我已经在 J AX WS 中设置了 SOAP WebServiceProvider 但我无法弄清楚如何从 SOAPMessage 或任何 Node 对象获取原始 XML 下面是我现在获得的代码示例 以及我试图获取 XML 的位置 WebSe
  • 项目缺少所需的注释处理库

    我的 Eclipse IDE 突然在问题视图中显示 xxxx 项目缺少所需的注释处理库 xxxx M2 REPO 中的一些旧 jar 我用谷歌搜索 没有找到任何答案 为什么我的项目使用旧的 jar 以及错误来自哪里 To remove th
  • 如何将现有的 SQLite3 数据库导入 Room?

    好吧 我在桌面上使用 SQLite3 创建了一个只需要读取的某些信息的数据库 我正在制作的应用程序不需要在此表中插入或删除信息 我在 Room 数据库层上做了相当多的谷歌搜索 所有文档都需要在构建应用程序时在 Room 中创建一个新的数据库
  • JTextField 和 JTextArea

    JTextField 和 JTextArea 有什么不同 是否可以在一个班级中使用这两个班级 总之 JTextField 是单行文本字段 而 JTextArea 可以跨越多行 文档中清楚地解释了这些差异 文本区 http docs orac
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • OpenNLP 与斯坦福 CoreNLP

    我一直在对这两个包进行一些比较 但不确定该往哪个方向走 我简单地寻找的是 命名实体识别 人 地点 组织等 性别识别 一个不错的训练 API 据我所知 OpenNLP 和斯坦福 CoreNLP 提供了非常相似的功能 然而 Stanford C
  • LocalDate 减去 period 得到错误的结果

    LocalDate减去一个Period 如 28年1个月27天 得到错误的结果 但减去一个Period 只有天单位 如 10282 天 得到正确的结果 有什么需要注意的吗 public static void main String arg
  • 如何在 Bean Validation 1.0 中构造 ConstraintViolationException?

    我对 javax validation API 感到困惑 我正在编写一个简单的测试来理解它 Sample sample new Sample Set
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • 使用 HTTPServletRequestWrapper 包装请求参数

    我有一个可以验证 授权 REST 调用的过滤器 该过滤器需要访问请求参数 因此我为此编写了一个自定义 HTTPServletRequestWrapper import java util Collections import java ut
  • 配置jmxremote时无法正常停止tomcat

    我添加了一个jmxremotecatalina bat中的配置 set JAVA OPTS Dcom sun management jmxremote port 9004 Dcom sun management jmxremote ssl
  • 如何配置Spring使JPA(Hibernate)和JDBC(JdbcTemplate或MyBatis)共享同一个事务

    我有一个数据源 我使用 Spring 3 0 3 Hibernate 3 5 1 作为 JPA 提供程序 我使用 MyBatis 3 0 2 进行一些查询 我的应用程序在 Tomcat 6 上运行 我有一个 HibernateDAO 和一个
  • Android项目中使用java获取电脑的IP地址

    我在用ksoap2 android http code google com p ksoap2 android 我需要使用java获取IP地址 这样我就不必每次都手动输入它 我所说的 IP 地址是指 例如 如果我这样做ipconfig使用命
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • Java:一个函数有多种返回类型...可以使用泛型吗?

    为了简单起见 我有一些程序 如下所示 public String fetchValueAsString String key public DateTime fetchValueAsDateTime String key 我想要类似的东西
  • JPA 将 BigDecimal 作为整数保存在数据库中

    我在数据库中有这个字段 ITEMCOST NUMERIC 13 DEFAULT 0 NOT NULL 在JAVA中 Entity中的字段定义如下 Column name ITEMCOST private BigDecimal itemCos
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • @Embeddable 中的 @GenerateValue

    我已将实体的 id 分离到一个单独的 Embeddable 类中 该实体如下 Entity Table name users public class Users EmbeddedId private Users pk id private

随机推荐