【问题标题】:Grails upgrade from 2.3 to 2.4: No Datastore Session bound to threadGrails 从 2.3 升级到 2.4:没有数据存储会话绑定到线程
【发布时间】:2015-03-11 17:49:39
【问题描述】:

我正在尝试将项目从 Grails 2.3.7 升级到 2.4.3,但许多页面都给出了错误:

没有数据存储会话绑定到线程,并且配置不允许 在这里创建非事务性的

我更改的唯一配置是 BuildConfig.groovy 的插件部分。我错过了什么吗?

我在 Oracle 11 中使用 Hibernate 3.6.10.16 插件。

更新:它似乎与从 gsp 运行查询有关。这是一个适用于 2.3.7 的模拟示例。

<g:set var="allBooks" value="${Books.createCriteria().listDistinct { }}" />

错误评估表达式 [Books.createCriteria().listDistinct { }] on 第 [1] 行:没有数据存储会话绑定到线程,并且配置确实如此 不允许在这里创建非事务性的

【问题讨论】:

  • 你试过hibernate4插件吗? Grails 2.4.3 有很多更新说明可能与您的问题有关(例如:“对于尚未从 Hibernate 3 插件升级的应用程序,建议将 Hibernate OSIVI 刷新模式设置为“手动””等) .无论如何,我建议将查询从视图移动到服务中。控制器调用服务,并填充传递给视图的模型。
  • 我尝试过 hibernate4,但我们使用 Oracle Label Security 并且我们的解决方案依赖于 hibernate3,所以这是另一个问题。我们的设计是模板驱动的,每个模板(视图)获取它需要的所有数据。这使我们可以灵活地将模板放在我们想要的任何地方。除了正确性之外,将所有模板转换为服务需要一些努力,尽管我们的服务运行良好......我希望快速修复以恢复旧行为。 :) 看起来我的选择是将所有视图查询移动到控制器/服务中,或者让 hibernate4 与 OLS 一起工作。

标签: grails


【解决方案1】:

您好,很难从您提供的信息中确切知道,但我有 3 个选项供您选择,因为我在升级 Grail 的版本或插件时多次看到此错误: 1.-检查您正在使用的插件是否有更新版本,特别是休眠,这修复了每次更新的许多错误。 2.- 检查您的数据库连接器,尝试不同的连接器,因为您更改了 grail 的版本,它可能与您使用的连接器不兼容。 3.- 尝试更改您正在使用的 JDK 版本。在更改 Grails 版本并将 JDK 从 6 更改为 7 时,我已经看到了很多这个问题。

我希望虽然我不能给你确切的答案,但我已经给你指明了寻找的方向。

【讨论】:

  • 感谢您的提示。我将 Grails 2.3 下的所有内容都更新到了最新可用的版本,以尽可能小地跳转到 2.4。 Hibernate (3.6.10.16)、Java (JDK 1.7.0_76)、ojdbc6 (11.2.0.3) 等。我希望像错误所说的那样简单地更新一些“配置”,以获得旧的行为。我也尝试过 Java 8 和 hibernate4,但这是另一个问题。
猜你喜欢
  • 2015-07-08
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 2011-05-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-31
相关资源
最近更新 更多