java - 当集合的元素被删除时,使用集合刷新实体会抛出 Unresolvable sObjectException

标签 java hibernate refresh collections

我们有一个使用 Hibernate 的两层 Swing 应用程序。有时我们在一个 session (A) 中操作一个对象,而我们在另一个 session (B) 中也知道该对象(两个不同的 Java 实例,相同的数据库记录)。

在这种情况下,在提交和关闭 A 之后,我们刷新 session B 中的对象,以便在 UI 中显示更新后的状态。在大多数情况下工作正常。

但是如果我们有一个包含 Y 集合的对象 X,我们会遇到以下事件序列的问题:

B:加载X和Y

A:加载X和Y

A:从集合和数据库中取出一个Y

A:刷新、提交并关闭 session

B:刷新X

在最后一步,我们得到一个 UnresolvableObjectException,这似乎发生了,因为 B X 保留了它的集合(而不是刷新集合本身)并尝试刷新 Y 的每个包含的实例,当到达已删除的实例时当然会失败。

如果在刷新 Collection 时发现类似问题的问题描述,但是

  • 无解

  • 没有错误报告

  • 没有解释,这是设计使然

所以这些是我的问题:我怎样才能解决我的问题(即使是指向源代码并贴上“修复此处”的指针也会有所帮助)?这是一个错误吗?如果是这样,它是已知的吗?

最佳答案

是的,就是这样。我也可以重现此错误。在我看来,这是 Hibernate 中的一个错误。

您可以做的是: 使用

session.evict(X);
session.load(X, primaryKeyOfX);

而不是线程 B 中的 session.refresh(X)。然后就可以了。

关于java - 当集合的元素被删除时,使用集合刷新实体会抛出 Unresolvable sObjectException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3054121/

相关文章:

java - HQL : Adding colon seperated strings for multiple parameters to search with

python - 不断重绘wxPython元素

python - 使用 Python 开发 Flask 应用程序时如何自动刷新浏览器?

jQuery 每 30 秒刷新一次

java - HibernateTemplate findByExample 不返回任何结果

java - 如何在java中读取和写入特定的东西

java - 需要使用枚举序数创建一个计数器

java - 错误消息 "Operator ' & &' cannot be applied to ' int' 'boolean'

java - JPA 无法将 Long 字段设置为 Long

Java 库运行时与编译时