Hibernate log грязные свойства сущности?

Я использую 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

Но он также включает довольно большое количество других операторов трассировки, которые я предпочел бы не регистрировать.


person FGreg    schedule 26.04.2013    source источник


Ответы (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 должен быть списком имен свойств.

person FGreg    schedule 26.04.2013