我用hibernate映射的对象有奇怪的行为。为了知道对象行为奇怪的原因,我需要知道是什么让对象变脏。有人可以帮忙并给我一个暗示吗?
该对象是Java / Spring上下文中的Java类。所以我更喜欢针对Java平台的答案。
编辑:我希望能够访问Hibernate脏状态以及它如何更改附加到会话的对象。我不知道一段代码会如何帮助。
至于实际问题:在由Spring TransactionManager管理的事务中,我对对象执行一些(读取)查询,而不对这些对象进行显式保存,它们由TransactionManager保存,因为Hibernate认为其中一些(和不是全部)都很脏。现在我需要知道为什么Hibernate认为那些对象很脏。
答案 0 :(得分:7)
我会使用拦截器。 onFlushDirty方法获取当前和之前的状态,以便您可以比较它们。实现Interceptor接口并扩展EmptyInterceptor,覆盖onFlushDirty。然后使用configuration.setInterceptor添加该类的实例(Spring可能要求您以不同方式执行此操作)。您也可以在会话中添加拦截器而不是在启动时。
答案 1 :(得分:1)
答案 2 :(得分:0)
假设无法直接访问对象的状态(例如,没有公共或包受保护的字段)并且没有通过反射进行处理,您可以在所有对象的方法的开头放置一个断点并运行该方案这使得对象在调试器中变脏。