如果你最终删除了对象,Hiberate是否会忽略它的变化状态?

问题描述 投票:0回答:1

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

有一个用于编辑的服务方法,它被标记为@Transactional,没有参数(所以REQUIRED是默认的)。这个服务方法会调用几个DAO方法。每个方法也被标记为@Transactional,并从SessionFactory的getCurrentSession()方法中获取Session对象。

当我们要删除对象时,我们首先要更新它,记录删除对象的用户id,这样历史表就会有一条记录,其中就有这个信息。然后我们使用session.delete()来删除它。问题是Hibernate忽略了删除前的这条更新记录,也许是由于一些优化逻辑决定了为什么要更新一条将要被删除的记录。

我们尝试将更新放在一个单独的方法中,并将其标记为REQUIRES_NEW。但这似乎会在DB2备份数据库中造成不规则的死锁问题。

Hibernate让你很难确定什么时候发生提交,如果你只是依靠注释,也很难确定。有谁知道如何处理这个问题吗?

hibernate hibernate-mapping
1个回答
1
投票

你应该尝试通过以下方式来刷新对对象的更改。session.flush() 然后 delete()

希望hibernate不会忽略这些变化。flush 已经执行了。


0
投票

一个变通的办法是执行一个本地SQL查询进行更新,然后执行删除。

© www.soinside.com 2019 - 2024. All rights reserved.