我正在使用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
但是它还包含了相当多的其他跟踪语句,我宁愿不记录。
答案 0 :(得分:0)
如果不是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
应该是属性名称列表。