Hibernate 每个实体可审核字段的存储

Hibernate 每个实体可审核字段的存储,hibernate,database-design,hibernate-envers,audit-trail,Hibernate,Database Design,Hibernate Envers,Audit Trail,我想捕获可审核字段以跟踪特定实体(比如createdBy、creationDate、modifiedBy、modifiedDate)发生了什么是一个很好的实践 我假设如果一个对象从未被修改过,那么为SNMPv3事件捕获以下可审核字段(比如createdBy、creationDate)是有意义的 我假设如果一个对象在多人创建后可以修改,例如用户配置文件可以由self或admin修改,那么捕获上述所有属性(比如createdBy、creationDate、modifiedBy、modifiedDat

我想捕获可审核字段以跟踪特定实体(比如createdBy、creationDate、modifiedBy、modifiedDate)发生了什么是一个很好的实践

  • 我假设如果一个对象从未被修改过,那么为SNMPv3事件捕获以下可审核字段(比如createdBy、creationDate)是有意义的

  • 我假设如果一个对象在多人创建后可以修改,例如用户配置文件可以由self或admin修改,那么捕获上述所有属性(比如createdBy、creationDate、modifiedBy、modifiedDate)是有意义的

  • 假设不需要每个实体的审核跟踪历史记录,那么将所有可审核属性存储在实体本身中是否有意义

  • 对于上述用例,将审计委托给第三方框架(比如JBoss Envers-)是否有意义

  • 假设一个实体(比如采购订单)是由用户X创建和维护的,并且用户Y对上述PO进行了一些改进。谁应该被标记为该实体的所有者(是创建者还是修改者)。creationDate在这种情况下可能根本不相关,所以在这里跟踪这个领域是有意义的

  • 注意:底层持久性层基于JPA,Hibernate 3.3.x(1)和(2)似乎是合理的,尽管对所有实体一视同仁,而不是使用“仅创建”和“创建/修改实体”将其复杂化可能不会有什么坏处

    (3) 将它们存储在实体上是最简单的,但我倾向于只为审计数据使用一个表或每个实体使用一个表。这将使您在需要存储多个修改(即完整历史记录)时具有灵活性。在查询主实体时,可能会稍微提高性能

    (4) Envers看起来很有趣,也很简单,但它似乎存储了完整的历史记录,您表示这不是必需的,所以可能有点过头了

    (5) 我想说,创建者总是导致初始插入的人(或进程),修改者是导致更新的最后一个人/进程。如果您想对所有者做出业务决策,请将其视为单独的字段,而不是审计解决方案的一部分