一尘不染

如何知道什么使休眠的持久对象变脏?

hibernate

我用hibernate映射的对象具有奇怪的行为。为了知道对象为何表现异常,我需要知道是什么使该对象变脏了。有人可以帮我提示吗?

该对象是Java / Spring上下文中的Java类。因此,我希望针对Java平台的答案。

编辑:我想获得对Hibernate脏状态的访问以及它如何在连接到会话的对象上更改。我不知道一段代码会对您有什么帮助。

至于实际的问题:在由Spring
TransactionManager管理的事务中,我对对象进行一些(读取)查询,并且没有对这些对象进行显式保存,因此它们由TransactionManager保存,因为Hibernate认为其中的一些(不是全部)很脏
现在我需要知道为什么Hibernate认为那些对象是肮脏的。


阅读 171

收藏
2020-06-20

共1个答案

一尘不染

我会使用拦截器。onFlushDirty方法获取当前状态和先前状态,因此您可以对其进行比较。实现Interceptor接口并扩展EmptyInterceptor,覆盖onFlushDirty。然后使用configuration.setInterceptor添加该类的实例(Spring可能会要求您以不同的方式执行此操作)。您也可以将拦截器添加到会话中,而不是在启动时添加。

这是有关拦截器的文档。

2020-06-20