Hibernate加入子类更新

Hibernate加入子类更新,hibernate,Hibernate,我有一个基类,a,还有两个子类,B和C。我有一个B的实例,我正在尝试更新该实例并将其类型更改为C。包含更新数据的C实例是暂时的,因为我无法想象有任何方法可以修改持久实例 当瞬态实例从前端传递到服务层时,一个会话开始,并进行一些检查以确保它是一个有效的操作。在此会话期间,将检索持久实例(B)。假设所有的东西都检查出来了,那么瞬态对象(应该)被持久化了 似乎.merge()是正确的调用方法,但是我们得到了一个ununiqueObjectException,就好像我们调用了.update()(这也不起

我有一个基类,
a
,还有两个子类,
B
C
。我有一个
B
的实例,我正在尝试更新该实例并将其类型更改为
C
。包含更新数据的
C
实例是暂时的,因为我无法想象有任何方法可以修改持久实例

当瞬态实例从前端传递到服务层时,一个会话开始,并进行一些检查以确保它是一个有效的操作。在此会话期间,将检索持久实例(
B
)。假设所有的东西都检查出来了,那么瞬态对象(应该)被持久化了

似乎
.merge()
是正确的调用方法,但是我们得到了一个ununiqueObjectException,就好像我们调用了
.update()
(这也不起作用,而且应该不会,因为持久实例当前在会话中)

我不知道为什么
.merge()
会给出ununiqueObjectException,因为我的理解是
.merge()
是针对这种情况的;正在尝试使用临时实例更新会话中存在的实体。我的猜测是,持久实例与瞬态实例是不同的类,这让人感到不安;我进行了测试,当我在同一类的临时实例上调用
.merge()
时,一切都正常工作


不确定下一步要做什么,我尝试对持久实例执行
.execut()
,然后对临时实例执行
.update()
,但这给了我一个StaleObjectException。在这一点上,我想不出一个解决办法。我们是在尝试做一些愚蠢的事情,还是可能存在某种配置问题?

在Java和hibernate中都无法做到这一点。这只能通过数据库中的直接SQL查询实现(绕过hibernate)。用hibernate的术语来说,您需要做的是删除
B
,然后创建一个新的
C
。您需要手动处理所有引用和关系(显然存在于
A
)。C
也将被分配一个新的id(如果
a`有一个自动递增的id或什么的话)。

那么问题是更改子类了吗?我有点失望,因为它不受支持。是的。用Java怎么能做到这一点呢?你不能。