我有一个基类,A
,和两个子类,B
和C
。我有一个B
的实例,我试图更新并将其类型更改为C
。包含更新数据的C
的实例是暂时的,因为我无法想象有修改持久实例的方法。休眠加入子类更新
当瞬态实例从前端传递到服务层时,会话开始并进行一些检查以确保它是有效的操作。在此会话期间,检索持久实例(B
)。假设一切都检出,瞬态对象是(应该是)持久。
这似乎是.merge()
是调用正确的方法,但我们得到了一个NonUniqueObjectException,我们仿佛被称为.update()
(这也不管用,不应该因为持久实例目前是在会议) 。
我不知道为什么.merge()
是给出了NonUniqueObjectException,因为我的理解是.merge()
是专门用于这种情况;试图用临时实例更新会话中存在的实体。 我的猜测是令人不安的是,持久实例与瞬态实例不同;我测试过了,当我在相同类的瞬态实例上调用.merge()
时,所有内容都按预期工作。
不知道接下来要做什么,我试着做.evict()
的持久实例,然后.update()
在瞬态的,但是这给了我一个StaleObjectException。在这一点上,我无法想出一个解决方案。我们是在试图做一些愚蠢的事情,还是会出现某种配置问题?
所以问题是改变子类呢?我有点失望,它不受支持。 –
是的。无论如何,你怎么能用Java来做到这一点?你不能。 – cherouvim