G_H*_*G_H 16 audit jpa properties javabeans java-ee
目前,我正在开发一个Java EE项目,其中包含有关持久性管理的一些非常重要的要求.用户对实体的更改首先需要在验证之前应用于某个工作副本,然后将它们应用于"实时数据".对实时数据的任何更改也需要有一些记录,以允许审计.
实体通过JPA进行管理,Hibernate将用作提供者.这是一个给定的,所以我们不回避Hibernate特定的东西.对于第一个要求,使用两个持久性单元.一个将实体映射到"实时数据"表,另一个映射到"工作副本"表.对于第二个要求,我们将使用Hibernate Envers,非常适合我们的用例.
到现在为止还挺好.现在,当用户在(基于Web的)前端查看数据时,能够指示工作副本中的哪些字段与实时数据相比更为有用.不同的颜色就足够了.为此,我们需要一些方法来了解哪些属性被改变了.我的问题是,有什么好办法可以解决这个问题?
使用JavaBeans API,PropertyChangeListener可以足以通知工作副本的实体中的任何更改并保留其中的一组.但是该集合也需要持久化,因为应用程序可以重新启动,并且在它们被验证并应用于实时数据之前,更改可以是长期的.并且在每次需要时应用实时数据的变化以获得工作副本是不可行的(因此两个持久性单元).我们还可以将工作副本与实时数据进行比较,并查找不同的字段.一些内省和反射代码就足够了,但这似乎相当于处理密集型,更不用说需要获取实时数据了.也许我错过了一些简单的东西,或者有人知道我可以使用的一个很棒的JPA/Hibernate功能.即使我无法避免制作(a)用于存储此类信息的单独数据库表,直到将其应用于实时数据,但这种方案的一些最佳实践或实际经验可能非常有用.
我意识到这是一个半开放的问题,但肯定其他人一定遇到过这样的要求.任何好的建议都值得赞赏,任何指向现成解决方案的指针都是接受答案的好候选人.
小智 0
也许您可以使用 Hibernate 刷新实体事件侦听器。脏属性是在刷新之前计算的。您可以将它们存储在数据库中的某个位置。
使用 Hibernate 的脏属性功能的示例代码可能会给您一个想法。
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |