Hibernate 如果最终删除对象,Hibrate是否会忽略其已更改的状态?

Hibernate 如果最终删除对象,Hibrate是否会忽略其已更改的状态?,hibernate,hibernate-mapping,Hibernate,Hibernate Mapping,我正在处理一些代码中的一个问题,Hibrate似乎忽略了在删除实体之前对其所做的更改。此应用程序有两个用于此类对象的表-一个用于保存当前状态,另一个用于保存第一个表中的行副本以保存对象的历史记录。进行更改时,存储过程将行从第一行复制到第二行 有一个用于编辑的服务方法,它被标记为@Transactional,没有参数(因此默认为REQUIRED)。服务方法调用多个DAO方法。每个方法还标记为@Transactional,并从SessionFactory的getCurrentSession()方法获

我正在处理一些代码中的一个问题,Hibrate似乎忽略了在删除实体之前对其所做的更改。此应用程序有两个用于此类对象的表-一个用于保存当前状态,另一个用于保存第一个表中的行副本以保存对象的历史记录。进行更改时,存储过程将行从第一行复制到第二行

有一个用于编辑的服务方法,它被标记为@Transactional,没有参数(因此默认为REQUIRED)。服务方法调用多个DAO方法。每个方法还标记为@Transactional,并从SessionFactory的getCurrentSession()方法获取会话对象

当我们想要删除对象时,我们首先要更新它以记录删除它的人的用户id,这样历史记录表将有一个包含此信息的记录。然后我们使用session.delete()来删除它。问题是Hibernate在删除之前忽略了记录的更新,这可能是因为某些优化逻辑决定了为什么要更新要删除的行

我们尝试将更新放在一个单独的方法中,并将其标记为新的。但这似乎会导致DB2后台数据库中出现不规则的死锁问题


Hibernate使得仅依赖于注释时也很难确定何时进行提交。有人知道如何处理这个问题吗?

解决方法可能是对更新执行本机SQL查询,然后执行删除。

您应该尝试通过执行
session.flush()
然后执行
delete()
来刷新对对象所做的更改


希望hibernate不会忽略已经执行了
flush
的更改。

希望这就是您所寻找的。