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怎么能做到这一点呢?你不能。