ไฮเบอร์เนตบันทึกคุณสมบัติเอนทิตีสกปรกหรือไม่

ฉันใช้ 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)


พบสิ่งที่จะใช้งานได้หากไม่ใช่เพราะสิ่งที่ดูเหมือนจะเป็นข้อบกพร่องในโค้ดไฮเบอร์เนต

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