我如何知道在@PostUpdate上修改了哪些实体属性?

时间:2014-01-24 01:25:49

标签: java jpa-2.0 openjpa

如何知道@PostUpdate事件中对象的哪些属性已更新?

UPDATE - 我注意到@PostUpdate是在提交更改的实际时刻之前调用的,所以如果我使用另一个数据源访问同一个数据库的数据库,我仍然可以手动查询它并通过以下方式检查更改:实体唯一ID。当然,这可能是很多工作,因为如果对象的一个​​相关对象被更改,则会认为该对象已更改。我想要的是这样的(http://docs.doctrine-project.org/en/2.0.x/reference/events.html#preupdate)但是对于openjpa。请参阅“PreUpdateEventArgs”概念。

更新 - 同时检查openJPA专有@Auditable

1 个答案:

答案 0 :(得分:1)

此处提供了有关此功能的完整讨论 - http://openjpa.208410.n2.nabble.com/Audit-log-with-OpenJPA-tc6557932.html

这些问题的替代解决方案分别使用PersistenceCapable(http://webspherepersistence.blogspot.com.br/2009/01/auditing-with-openjpa.html)和ThreadLocal与@PreUpdate和@PostLoad(http://struberg.wordpress.com/2010/07/31/howto-changelog-with-jpa/

结合使用

如@koitoer所述,JPA 2.1。没有这样的功能,AFAHK。

虽然,特别是openJPA,似乎有一个合理的解决方案

http://openjpa.apache.org/builds/2.2.0/apache-openjpa/docs/ref_guide_audit.html