JPA: 跟踪实体的演变/更改的想法

6

我想知道是否有一种简单的方法来实现对实体更改的跟踪? Hibernate 中有 Envers 可以进行审计,但据我所知它是面向 Hibernate 的。我在思考是否有 JPA 内部的解决方案或者不需要超出规范的解决方案。 如果没有这样的解决方案,是否有人可以给我一个启示如何开始处理这种事情。我想到的一个思路是创建一个实体,例如:

class Change {
  String className;
  long id;
  String fieldName;
  String fieldValue;
  Date dateOfChange;
}

这将包含更改的属性。从存储空间的角度来看,这种解决方案似乎相当高效,但处理跟踪实体之间的关系可能会更加困难(尚未弄清楚)。

我非常感谢您在这个话题上提供的任何意见,

此致敬礼, P.


我认为在 JPA 1.0 中不行。也许在 JPA 2.0 中可以? - Kartoch
JPA2 不涉及这些事情。它被列在 JPA2.1 可能的项目中(请在两年后再回来)。 - DataNucleus
1个回答

4
你可以使用@PrePersist注解创建一个条目并将其存储到数据库中。
class Entity{

    @PrePersist
    public void logChanges(){
        Change c = new Change()
        c.setEverythingXouLikeToLog();

        entityManager.persist(c);
        // don't forget ExceptionHandling
    }

}

这是我正在考虑的方法,即使我不喜欢实体内部的实体管理器。这种解决方案的缺点是从给定日期检索状态可能会相当复杂。 - redbull
我想我会走这条路,感谢您的时间和建议,问候! - redbull

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接