问题标签 [staleobjectstate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
703 浏览

database - JPA:为什么合并会在没有级联的情况下更新连接表

感谢您提前查看此问题。

基本上,我有几个实体,这就是关系。

A---< 表AB>---- 表B

和实体类:

现在我有 2 个会话访问同一个A对象。我更改了 的bListA并将其保存在会话 1 中。所以现在,A会话 2 中的对象是陈旧的,我保存了一个对象C,该对象A在其陈旧状态下具有对象的引用。

我想知道为什么不使用cascade = {PERSIST, MERGE}将其放入@ManyToMany注释中,保存对象C也会将过时状态更新A回数据库,所以我A在会话 1 中对对象所做的更改就消失了?

0 投票
2 回答
1759 浏览

java - 无法捕获 org.hibernate.StaleObjectStateException

我们不能捕获 StaleObjectStateException 吗?我有 StaleObjectStateException 的 catch 块,所以当方法抛出这个错误时,它会来到这个 catch 块,但仍然会再次抛出相同的异常。我知道这个异常发生的原因,但我想抓住这个异常并继续前进。

0 投票
0 回答
678 浏览

hibernate - grails,行被另一个事务更新或删除

我试图在我的控制器update方法中调用一些服务。不幸的是,这导致了一个StaleObjectStateException,我真的不知道为什么,因为我“只是”调用服务方法transactional

这是一个例外:

..以及我的控制器更新方法中的重要部分:

两种服务方式:

0 投票
1 回答
139 浏览

grails - grails 何时检查对象过时性?

我正在使用 Grails 2.5.1,并且我有一个控制器调用一个服务方法,该方法偶尔会导致StaleObjectStateException. 服务方法中的代码在obj.save()调用周围有一个 try catch,它只是忽略了异常。但是,每当发生这些冲突之一时,日志中仍然会打印一个错误,并向客户端返回一个错误。

我的游戏控制器代码:

我的游戏服务代码:

堆栈跟踪说异常是从我的GameController.finish方法生成的,它不指向我的GameService.scoreGame方法中的任何代码。这对我来说意味着 Grails 在事务启动时检查陈旧性,而不是在尝试保存/更新对象时?

我多次遇到这个异常,通常我通过不遍历对象图来修复它。

例如,在这种情况下,我将删除game.rounds引用并将其替换为:

但这意味着在创建事务时不会检查陈旧性,并且它并不总是实用的,并且在我看来有点违背 Grails 惰性集合的目的。如果我想自己管理所有的协会,我会的。

我已阅读有关悲观和乐观锁定的文档,但我的代码遵循那里的示例。

我想了解更多关于 Grails (GORM) 如何/何时检查陈旧性以及在哪里处理它的信息?

0 投票
1 回答
407 浏览

grails - 无法找出 StaleObjectStateException 的原因

我很难弄清楚我一直看到的原因:

我有一个使用 Quartz Scheduler 来触发作业的服务,在我的上下文中,这些作业被调用Flows,并且每个流可能由多个Tasks流和任务组成,Executables并且有关它们的实际信息Executions存储为FlowExecutionsTaskExecutions。该服务使用 aFlowService来启动流。

UPD:有一个 Quartz Job,“ExecutorJob”负责触发我的流程/任务。当它被触发时,它使用 FlowService 来启动它应该做的任何事情。所以我想知道石英线程是否有可能在每次使用服务时都没有创建新的休眠会话,这就是问题的原因。我没有改变 FlowService 的范围,所以它是一个单例,GORM 如何管理它使用的会话?

UPD2:尝试在 ExecutorJob 上使用 persistenceContextInterceptor 以确保每次使用该服务都使用一个新会话,但它没有解决问题。添加了 ExecutorJob 的简化代码。

我无法在本地重现该问题,但它在生产中经常发生,更具体地说,当需要启动大量流程时。我尝试过同步execute任务和流程的方法,但没有奏效,我现在尝试使用悲观锁,但我的猜测是它不会解决问题,因为检查应用程序日志似乎没有' t 两个线程更新同一行。下面我尝试展示一个简化版本的代码来模仿项目的结构。

任何人都知道可能有帮助的东西吗?

0 投票
2 回答
124 浏览

c# - 如何“治愈”休眠会话

是否可以修复在保存/提交休眠会话期间出现的异常?

背景:我们目前正在使用 FluentNHibernate 更新每个会话的数百条记录。时不时地会抛出一个 StaleException,因为其中一条记录已被其他进程更改。我看到异常给了我导致麻烦的记录的 ID,所以理论上,我可以尝试驱逐/重新加载对象并再次尝试修改对象,而不是回滚整个休眠事务。

该工作会尝试第二次调用 Commit,还是会话由于抛出异常而变得无效?

0 投票
1 回答
63 浏览

java - 高级陈旧元素

我一直在阅读有关陈旧元素的内容,但仍然有些困惑。例如,以下行不通,对吗?

因为如果 ele 是陈旧的,它将保持陈旧。最好的办法是重做 driver.findElement(By),但正如您在这个示例中看到的,没有 xpath。您可以尝试 ele.getAttribute("id") 并使用它,但如果元素没有 id,这也将不起作用。所有调用它的方法都必须在它周围放置 try/catch,这可能是不可行的。

有没有其他方法可以重新找到元素?另外,假设有一个 id,在元素过时后 id 会保持不变吗?一旦过时,WebElement 对象 ele 有什么不同?

(Java 日食)

0 投票
3 回答
429 浏览

java - 使用 Selenium 导航时过时的对象引用

我一直在尝试一个简单的程序,它从新页面导航和获取数据,返回历史记录并打开其他页面并获取数据等等,直到所有链接都被访问并获取数据。

在以下站点上获得结果后,我试图遍历我在第一列中获得的所有链接,并一个接一个地打开这些链接并从每个页面中提取文本。但是下面的程序只访问第一个链接并给出 StaleElementReferenceException,我试过使用Actions但它没有用,我不知道JavascriptExecutor. 我还尝试了在其他 SO 问题上发布的解决方案,其中一个是我。我想纠正以下代码和工作代码中的错误。

0 投票
1 回答
478 浏览

c# - WPF通知ComboBox选择框和下拉列表项不同步不及时刷新

我希望我的 MVVM 表单中的组合框在绑定数据更改后立即刷新显示当前所选项目的选择框和当前所选项目的下拉列表项。我不能让这发生。刷新图片也很重要。

示例表单有 2 个显示预加载人员的组合框和一个用于添加人员的按钮和一个用于更改现有人员的某些数据的按钮。单击该按钮时,该Person.Type字段会随机更改一些,并且将不同的图片文件字符串存储在Person.PicFullPath.

这是行为:

运行应用程序
视图模型处于状态 1
单击“更改当前行数据”
视图模型处于状态 2
没有可见变化:我希望选择框显示更改的Type数据和不同的图片

点击组合框 cbo1
下拉列表显示People.Type. 选择框仍然显示旧数据。

点击组合框cbo2
下拉列表显示变化People.Type和不同的图片。选择框仍然显示旧数据。

再次单击“更改当前行数据”而不移动所选项目。

视图模型处于状态 3。
没有可见的变化:随着下拉列表收回,表单看起来与初始化时相同。

点击组合框 cbo1
下拉列表仍显示第一次更改的People.Type,但People.Type已再次更改。选择框仍然显示原始数据。

单击组合框 cbo2
下拉列表自上次删除后未更改。选择框仍然显示原始数据。

视图模型中的状态发生了 3 次更改,但组合框在选择框中显示状态 1,在下拉列表中显示状态 2。我希望他们在两个地方都显示状态 3。

单击组合框 cbo1 并选择另一个项目,然后选择第一个项目。所以我们已经移动了选定的项目并将其移回。
两个组合框都在选择框中显示最新数据,
下拉列表已过时。两者都显示状态 2,因此更改选择并将其更改回并没有更改下拉列表中显示的数据。

单击“新行”
视图模型处于状态 4
无可见变化:正如预期的那样 - 未选择新人员,因此不会有可见变化。

单击组合框
下拉列表中显示新人,但第一项仍显示状态 2。

没有点击将使下拉列表在第一次更改后显示更改 - 它们卡在显示状态 2。

如何使选择框和下拉列表始终显示最新数据?

0 投票
1 回答
181 浏览

java - 并发 API LayoutLocalService.addLayout 在 LayoutSetLocalService 中抛出 StaleObjectStateException

更新

Liferay 票已接受,开发中的解决方案:https ://issues.liferay.com/browse/LPS-82954

情况

我的上下文是通过liferay portlet 并行导入liferay 布局;用弹簧建造。当我在 Liferay dxp 中执行它时;添加布局的 api 调用会引发 StaleObjectStateException。(https://github.com/liferay/liferay-portal/blob/d969e0e839db9ea64267f7bff0a76be93cd26fa0/portal-impl/src/com/liferay/portal/service/impl/LayoutLocalServiceImpl.java

当 api 在内部对相应的 LayoutSet 进行更新时会发生此异常(刚刚更新了该组的 PageCount,布局已添加到该组,就在刚才)。

这不会发生在单线程执行中!

行动

  1. 首先我同步了那个调用..没有任何更好的结果
  2. 与此同时,我读到了一些关于仅同步线程无济于事的内容,因为事务本身可能不在同步执行块内。因此我还添加了事务注释。..没有更好的结果

到目前为止,我获得了以下见解:

代码摘录

-> 可用的测试项目:https ://github.com/andrebiegel/liferay-layout-issue.git