Hibernate记录脏实体属性



我使用JPA与Hibernate作为我的提供者。

我有一个实体被标记为脏的情况,我不知道为什么。是否有一个记录器,可以打开,将打印为什么一个实体被标记为脏?换句话说,实体上的哪些属性发生了变化,导致它被标记为脏的?

我使用SLF4j和logback进行日志记录。到目前为止我能找到的最好的是

<logger name="org.hibernate.persister.entity.AbstractEntityPersister" level="trace" />

这将给我这样的日志语句:

26-Apr-2013 09:24:50.054 [SimpleAsyncTaskExecutor-8] TRACE o.h.p.entity.AbstractEntityPersister - com.example.MyEntity.myEntityProperty is dirty

但是它还包括相当多的其他跟踪语句,我不希望记录它们。

找到一个工作,如果不是因为Hibernate代码中的错误。

org.hibernate.event.internal.DefaultFlushEntityEventListener.logDirtyProperties(Serializable, int[], EntityPersister)

这种方法几乎正是我正在寻找的,并且为org.hibernate.event.internal.DefaultFlushEntityEventListener打开跟踪的影响非常小。不幸的是,使用:

打开跟踪
<logger name="org.hibernate.event.internal.DefaultFlushEntityEventListener" level="trace" />

的结果是这样的日志消息:

26-Apr-2013 09:51:33.370 [SimpleAsyncTaskExecutor-8] TRACE o.h.e.i.DefaultFlushEntityEventListener - Found dirty properties [[com.example.MyEntity#1]] : [Ljava.lang.String;@221c75
26-Apr-2013 09:51:33.370 [SimpleAsyncTaskExecutor-8] TRACE o.h.e.i.DefaultFlushEntityEventListener - Updating entity: [com.example.MyEntity#1]

问题是[Ljava.lang.String;@221c75应该是一个属性名称列表

最新更新