JPA中是否有org.hibernate.envers.Eudited的实现



休眠信封JPA中是否有org.Hibernate.Envers.Audited的实现?使用SpringDataJPA技术时,应用数据版本控制的最佳方式是什么?需要包括哪些依赖项?请分享你的经验。Spring Data扩展与Hibernate Envers一起工作怎么样?

休眠环境

  • 一旦Envers项目jar文件被添加到类路径(或者取决于Maven(,就可以在不进行进一步配置的情况下使用它
  • 实体类可以使用实体上的@org.hibernate.envers.audited注释进行选择性审核。通过用这个注释标记一个类,hibernate将对包括集合在内的所有属性进行版本化。若要排除属性,需要使用@org.hibernate.envers.NotAudited注释标记类字段(集合、关系(
  • Hibernate将在数据库中生成(或查找(额外的表,以存储用@org.Hibernate.envers.Audited注释注释的每个实体实例的存档数据

更改历史记录存储在SomeEntity实例对应的SOME_ENTITY_AUD表中。还会创建一个REVINFO表。当数据发生更改并提交事务时,Hibernate将在REVINFO表中存储带有时间戳的新版本号。SOME_ENTITY_AUD表另外具有两个字段1(REV<lt;PK>gt<lt;FK>gt-对REVINFO的引用,2(REVTYPE列存储更改类型:在事务过程中是否添加、更改或删除了特定实体实例。在Java中,它被表示为enum RevisionType

  • 0-ADD
  • 1个月
  • 2-德尔

信封从不删除版本信息和存档数据;即使在SomeEntity实例上调用remove((方法之后,其以前的版本仍将存储在SOME_ENTITY_AUD表中。此外,SOME_ENTITY_AUD表还有一个字段REVTYPE。它显示了操作的类型。获取审核数据:

使用EnversAuditReader界面,您可以找到每组更改的版本号:

AuditReader auditReader = AuditReaderFactory.get(em);

搜索集合:

List<Number> itemRevisions = auditReader.getRevisions(Item.class, ITEM_ID);

获取时间戳:

for (Number itemRevision : itemRevisions) {
Date itemRevisionTimestamp = auditReader.getRevisionDate(itemRevision);
// ...
}

获取版本号:

Number revisionUpdate = auditReader.getRevisionNumberForDate(TIMESTAMP);

实体查找:

SomeEntity someEntity = auditReader.find(Item.class, ITEM_ID, revisionUpdate);

如果时间戳和版本号都未知,则可以使用forRevisionsOfEntity((方法创建查询,并从特定实体的审核日志中检索所有条目。

相关内容

  • 没有找到相关文章

最新更新