【问题标题】:Hibernate log dirty entity properties?Hibernate记录脏实体属性?
【发布时间】:2013-04-26 14:34:50
【问题描述】:

我使用 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

但它还包含大量其他我不想记录的跟踪语句。

【问题讨论】:

    标签: java hibernate jpa logging logback


    【解决方案1】:

    找到一个可以工作的,如果不是因为 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 应该是属性名称列表。

    【讨论】:

      猜你喜欢
      • 2011-02-10
      • 2011-05-20
      • 1970-01-01
      • 2021-09-01
      • 2013-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      相关资源
      最近更新 更多