Hibernate org.hibernate.TransactionException:jaxrs 不支持嵌套事务

2024-01-28

我将 jersey 与 mysql、hibernate 4 和 c3p0 一起使用。我创建了一个初始化 servlet,用于配置 hibernate 并将当前会话上下文类设置为线程。 我创建了 hibernateUtils 类,其中包含用于获取和提交会话的静态方法,并且我使用过滤器根据入站请求启动会话并在响应时提交它。

问题是,在某些随机间隔内,我收到 org.hibernate.TransactionException:不支持嵌套事务异常,但除了过滤器之外,我并没有尝试创建新会话。

如果我错了,请纠正我,但是当将当前会话类设置为线程时,我不需要在 hibernateutil 中创建 threadlocal,hibernate 会这样做。所以我的问题是,这是处理该问题的安全方法吗?什么可能导致随机间隔发生错误?

======================编辑============================

抱歉没有早点发布代码。 所以过滤器实现了ContainerRequestFilter,ContainerResponseFilter

在我正在做的请求过滤器中

Session session = sessionfactory.getCurrentSession();
session.getTransaction().begin();
session.setDefaultReadOnly(readOnly);

并在回应中

Transaction transaction = sessionfactory.getCurrentSession().getTransaction();
try {
    if (transaction != null && !transaction.wasCommitted()
       && !transaction.wasRolledBack() && transaction.isActive()) {
        transaction.commit();
    }
} catch (HibernateException e) {
    Transaction transaction = sessionfactory.getCurrentSession().getTransaction();
    try {
        if (transaction != null && transaction.isActive()) {
            transaction.rollback();
        }
    } catch (HibernateException e) {

    } finally {
         Session session = sessionfactory.getCurrentSession();
         try {
              if (session != null && session.isOpen()) {
                  session.close();
              }
         } catch (HibernateException e) {
            log.error("Closing session after rollback error: ", e);
            throw e;
     }

}


您似乎在过滤器中使用编程事务划分(据我所知)。因此,请仔细检查您是否正确终止每个事务,而不必介意在请求期间追加什么(即,如果出现异常则回滚,否则提交):

try {
    session.getTransaction().begin();
    // call the filter chain
    session.getTransaction().commit()
}
catch (RuntimeException e) {
    session.getTransaction().rollback();
}

如果没有代码,很难确定,但我猜想对于某些请求,您没有正确终止事务(即通过提交或回滚)。因此,事务仍然与线程关联,线程返回到线程池(处于一种非常奇怪的状态,因为仍然有一个事务与其关联),然后另一个请求重用同一线程,在过滤器中创建一个新事务...你得到了例外。

EDIT

仔细查看您的代码后,它(可能)证实了我的假设。

看流量时transaction.wasRolledBack()==true:它不会被提交或回滚。

如果你的 javadocTransaction.wasRolledBack() http://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Transaction.html#wasRolledBack%28%29 :

这笔交易是否已回滚或设置为仅回滚?

如果事务被标记为“RollBack only”:它将返回 true,但并不意味着事务已结束。这意味着事务唯一可能的结束状态是“RollBack”。

但是,另一方面,同一个 javadoc 也这么说:

返回: boolean 如果事务通过本地事务回滚则为 True;否则为假。

我发现这很模棱两可。

所以我建议你这样做:

if (transaction != null && !transaction.wasCommitted()
   && !transaction.wasRolledBack() && transaction.isActive()) {
    transaction.commit();
}else if(transaction.wasRolledBack()){
    transaction.rollback();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate org.hibernate.TransactionException:jaxrs 不支持嵌套事务 的相关文章

  • 如何知道 HTTP 服务器何时完成发送数据

    我正在开发一个面向浏览器 代理的项目 我需要下载网页 向 Web 服务器发送自定义 HTTP 请求后 我开始监听服务器响应 读取响应时 我检查响应标头中的 Content Length row 如果我得到其中之一 很容易确定服务器何时完成发
  • HibernateTemplate 可以与 EntityManager 共存吗?

    我们有一个 spring 3 应用程序 它仍然使用已弃用的HibernateTemplate为了持久性并希望迁移到更现代的 JPAEntityManager 是否可以在迁移过程中并行使用这两个 API 甚至可能在单个事务中同时使用 以便我们
  • 无法禁用 Firestore 中的离线数据

    从我的数据中删除数据后Firestore Database 这需要我的Android app一段时间后才意识到数据已被删除 我认为这是由于自动数据缓存而发生的 我的应用程序与离线使用无关 我想禁用此功能 我已将其添加到我的自定义中Appli
  • 使用 ScriptEngine 从 JavaScript 调用 Java 方法

    我正在使用 ScriptEngine 运行 JavaScript 我希望 JavaScript 脚本能够调用 myFunction 其中 myFunction 是我的给定类中的一个方法 我知道可以将 importPackage 用于标准 J
  • 浏览时 Java Applet 不会被终止

    当用户离开加载小程序的页面时 如何停止 Java 小程序的进程 我正在使用 Chrome 现在要杀死小程序 我必须使用窗口的任务栏并杀死进程 java exe Java applet 具有生命周期方法 那些是init start stop
  • 从 Windows Batch (cmd.exe) 中的文件读取环境变量

    我正在尝试从批处理文件中读取变量 以便稍后在批处理脚本 Java 启动器 中使用 理想情况下 我希望所有平台 Unix Windows 上的设置文件都具有相同的格式 并且也是有效的 Java 属性文件 也就是说 它应该看起来像这样 sett
  • 如何增加使用 SAX 解析 XML 文件的entityExpansionLimit

    我正在尝试使用 Java 中的 SAX 解析器解析一个 1 23 GB 的 XML 文件 我使用的是 Mac 操作系统和 JDK 1 7 0 51 不幸的是 我收到以下错误 The pasrser has encountered more
  • 如何修复运行 Android 模拟器时出现 GPU Driver Issue 错误

    我的 Android 模拟器几周前运行良好 但现在出现错误 当我运行代码时 GPU 驱动程序问题错误对话框与模拟器一起弹出 当我单击 确定 时 Android 模拟器不会按预期运行应用程序 错误如下 Your GPU driver info
  • 具有多个字符串的列表视图

    我正在尝试创建一个包含多个字符串的列表视图 现在我有一个可以实现的功能 while i lt 10 GETS DATA FROM WEBPAGE ETC a DATAFROMWEBPAGE1 b DATAFROMWEBPAGE2 c DAT
  • 不带破折号的 CliBuilder 参数

    使用 Groovy CliBuilder 理想情况下我希望有一个命令行 如下所示 MyProgram groovy CommandName arg1 arg2 arg3 是否可以使用 CliBuilder 解析提取 CommandName
  • 如何在 WebSphere Liberty Batch 中配置事务超时?

    的作用是什么javax transaction global timeout 我是否需要实施检查点 超时 中的方法检查点算法 服务器配置级别有什么东西吗 它如何与应用程序级别的设置进行交互 2016年12月2日编辑 重新设计并解释了为应用程
  • Jetty 提供静态内容所需的最少文件集?

    背景 免责声明 I have veryJava 经验很少 我们之前在 Ant 构建期间使用了 Jetty 6 的包装版本来处理按需静态内容 JS CSS 图像 HTML 因此我们可以使用 PhantomJS 针对 HTTP 托管环境运行单元
  • toArray 与预先确定大小的数组

    使用时ar toArray new String ar size 安卓工作室3 2 1警告预先确定大小的数组并建议空数组 有两种方式将集合转换为数组 使用 预先确定大小的数组 如 c toArray new String c size 或使
  • 在Linux中执行jar文件[关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我创建了一个可执行的 Java jar 文件 也就是说 我将 java 程序正确打包到 jar 文件中 包括 META INF MANIFEST 文件
  • 谷歌的Json解析Gson库:JsonElement和JsonObject有什么区别?

    public abstract class JsonElement extends Object 表示 Json 元素的类 它可以是 JsonObject JsonArray JsonPrimitive 或 JsonNull public
  • 尝试用Java实现基于文本的Hangman游戏

    我需要检查用户输入的字母以及他们猜测的空格是否位于隐藏单词的特定位置 变量one等于用户猜测的空间索引 而letterGuess是他们猜测的字母 我的代码怎么错了 示例 秘密词是你好 hidden word is 用户猜测h 0 1 2 3
  • 在 x64 系统上使用 skype-java-api

    我正在使用 skype java api 在 Java 中使用 Skype 我需要的唯一功能是点击即可拨打电话号码 它在 Windows XP x86 上运行良好 但我刚刚在 Windows 7 x64 上测试它 但失败了 错误是 线程 T
  • 枚举

    我试图拥有一组扩展通用接口的枚举 例如 interface Fooable void someCommonMethod enum E1 implements Fooable some enumuerations and a definiti
  • Java Media API:java media api 下载

    我在哪里可以找到javax media jar 文件 在sun站点它下载一个安装程序 有没有可用的java媒体jar 没有 javax media 具体是 jar 文件 该包位于 jmf jar 文件中 您需要运行安装程序并取出 jar 或
  • 确保 MAVEN_HOME 设置正确

    这里是 Java 和 Maven 菜鸟 使用 OSX 10 8 并使用 HomeBrew 安装 Maven 1 如果我说which mvn我会得到这个 usr local bin mvn 2 如果我说echo MAVEN HOME我不会得到

随机推荐

  • 加载动态 .ini 标识符

    我正在创建我的学生计划表的虚拟版本 它基本上可以让你记下你有哪些科目的作业 Here is the interface 用户从组合框中选择主题并在相邻的备忘录中输入一些注释 完成后 他们将单击 保存 按钮 将其保存到 ini 文件中 所选日
  • 无法链接到 fftw3 库

    我正在编译一个测试程序来测试fftw3 ver3 3 4 由于它不是使用 root previlidge 安装的 所以我使用的命令是 gcc lm L home my name opt fftw 3 3 4 lib I home my na
  • 使用 selenium 检查域

    我正在尝试在 VBA 中使用 selenium 检查某些域 这是我的尝试 Option Explicit Sub Check Domain Dim bot As New WebDriver Dim sDomain As String sDo
  • JQuery 模态框和 Iframe

    我一直在使用 Simple Modal 但我觉得它不能满足我目前的需要 是否有一个模态框支持加载外部文件并允许这些外部文件关闭模态框并将父页面重定向到某个url 我想做的一个例子 您有一个用户列表 您可以单击 添加用户 然后会弹出一个带有表
  • 基于排序的分区(如快速排序)

    这是一道面试题 给定一个包含 3 种对象白色 红色 黑色的数组 应该实现数组的排序 使其看起来如下 白色 黑色 红色 面试官说 你不能使用计数排序 他的提示是考虑一些与快速排序相关的技术 所以我建议使用类似于快速排序分区的分区 他只要求只使
  • 从远程数据库检索数据

    有人可以向我解释一下从远程数据库检索数据的过程吗 我了解如何将数据从 sqlite 解析到 iPhone 应用程序 但远程数据库似乎更复杂 我尝试做研究 但是我对网络服务 云和其他我不熟悉的词感到困惑 到目前为止 我认为我需要使用 JSON
  • HDFS 对 DC/OS 中机器重启的弹性

    我已在由 10 台 Core OS 机器 3 个主节点 7 个代理节点 组成的 DCOS 集群上安装了 Universe 中的 HDFS 我的 HA HDFS 配置有 2 个名称节点 3 个日志节点和 5 个数据节点 现在 我的问题是 HD
  • R 中 visNetwork 中的边组和选择

    有没有办法创建网络边缘组 我可以选择一组显示带有节点的选定边的边吗 手动使用箭头上的不同颜色和标题进行可视化 这适用于该页面中间显示的教程等节点 https datastorm open github io visNetwork optio
  • mongodb 游标何时过期

    我对 mongodb 不了解 我只是想问是否有可能 如果可能 如何做到这一点 我的问题是我们如何知道游标何时过期 有没有用于此目的的API 如果有任何意见和建议 我将不胜感激 此致 来自 MongoDB 文档 默认情况下 当客户端用完游标中
  • 为在 WooCommerce 中显示自定义产品价格的功能启用回价后缀

    我在用 在 Woocommerce 中为登录用户启用销售价格 为未登录用户启用常规价格 https stackoverflow com questions 49706432 enable sale price for logged user
  • 尝试从类继承时出现错误:“x 实例没有属性 y”

    我无法真正理解我做错了什么 因为当我在 小规模 中尝试它并且它在那里工作时 我有一个名为Play 我是这样的 class Play def init self file open home trufa Desktop test r self
  • iOS8 和 Xcode - 如何分发具有 cocoa pod 依赖项的嵌入式框架

    我需要创建一个compiled分发给第三方的框架 我在用cocoa pods处理my依赖关系 为了实现这一目标 创建动态链接框架似乎是最好的选择 但我不确定并且愿意接受建议 我采取的步骤是 我创建了一个包装项目来包含框架目标 在包装器项目中
  • 更新查询 PHP MySQL [重复]

    这个问题在这里已经有答案了 谁能帮助我理解为什么这个更新查询没有更新我数据库中的字段 我的 php 页面中有这样的内容 用于从数据库中检索当前值
  • 自定义透明对话框(windowBackground不存在?)

    我正在尝试创建一个具有半透明背景的自定义对话框 我设法通过代码让它工作 getWindow setBackgroundDrawableResource R color bg tran 其中 bg tran A0000000 不过 我宁愿将其
  • 在 data.frame() 中移动列而不重新输入

    是否有一种方法可以将列从 data frame 中的一个位置移动到下一个位置 无需键入全新的 data frame 例如 a lt b lt c lt d lt e lt f lt g lt 1 100 df lt data frame a
  • 图像特定区域的平滑[重复]

    这个问题在这里已经有答案了 可能的重复 OpenCV中如何设置ROI https stackoverflow com questions 8206466 how to set roi in opencv 我试图在图像上使用平滑 模糊滤镜 但
  • C# 关键字作为变量

    在 VB NET 中 您可以用方括号将变量名称括起来 并使用关键字作为变量名称 如下所示 Dim goto As String 有 C 相当于这样做吗 string string
  • Django 属性错误:模块“appname”没有属性模型

    我知道我的问题可能涉及相互 循环导入 并且我在发布之前确实进行了搜索 我发现当前解决我的问题的唯一解决方案是将导入移至其中一个文件的末尾 就在实际使用导入的函数之前 但我也读到这是非常不推荐的 推荐的解决方案 只需执行以下操作 in A p
  • 在node.js中使用zlib使用字典压缩数据

    如果我想给弦放气s我可以 var d zlib deflateSync s 我注意到在类选项下的文档 https nodejs org api zlib html zlib class options我可以设置字典 但我不知道如何使用它 如
  • Hibernate org.hibernate.TransactionException:jaxrs 不支持嵌套事务

    我将 jersey 与 mysql hibernate 4 和 c3p0 一起使用 我创建了一个初始化 servlet 用于配置 hibernate 并将当前会话上下文类设置为线程 我创建了 hibernateUtils 类 其中包含用于获