Envers项目目标是使翻译JPA持久类更容易。所有你需要做的是注释你的持久化类以及类的属性,用@Versioned。
对于每个要翻译的实体(entity),会创建一个表。
Envers会保存实体改变的历史。你还可以检索和查询历史数据。
类似于Subversion,其库包含修改(revision)的概念。基本上,事务处理提交是一次修改。由于修改是全局的,有一个修改号,所以你可以查询任何修改版本的各个实体。
Envers库与Hibernate和Hibernate的实体管理器一起工作,为了更准确地完成实体翻译工作,实体必须有一个不变的唯一标识符(主键),还可以在单独、JBoss AS、JBoss Seam或Spring等环境下工作。
Envers的特征如下:
1)基本属性的翻译(字符串、整数、长整型...);
2)内嵌组件的翻译,内嵌组件由基本属性组合而成;
3)带简单、组合、和内嵌的IDS的类的翻译;
4)一对一的单向或双向关系的翻译;
5)一对多的单向或双向关系的翻译;
6)支持二级表;
7)为每次修改的日志数据都使用了“修改实体”;
8)查询历史数据。
例子:
英文原文:https://spring.io/projects/spring-data-envers 目录 概述 快速开始 学习 文档 概述 该项目是Spring Data JPA项目的扩展,允许访问由Hibernate Envers管理的实体修订。 消息来源主要来自PhilippHügelmeyer@hygl的贡献。 快速开始 使用Spring Initializr引导您的应用程序。 学习 文档
Envers概述 Envers项目目标是使翻译JPA持久类更容易。所有你需要做的是注释你的持久化类以及类的属性,用@Versioned。 对于每个要翻译的实体(entity),会创建一个表。 Envers会保存实体改变的历史。你还可以检索和查询历史数据。 类似于Subversion,其库包含修改(revision)的概念。基本上,事务处理提交是一次修改。由于修改是全局的,有一个修改号,所以你可以
Hibernate Envers项目旨在实现对持久类的简单审计。它完全消除了审计实体的麻烦。 以下部分概述了使用自定义修订实体通过 Spring 引导配置 Envers 的高级步骤。它演示了在涉及多个数据源时如何配置 Envers。 Envers 入门 如果您使用的是 Maven,请在 pom 中添加以下 Envers 配置.xml org.hibernate hibernate-envers 创
Spring Data是一个建立在spring框架之上的模块,用于简化数据库事务。它提供了各种接口和注释,以便于开发。Spring 数据使用@Repository注释,这是 Spring 框架提供的注释的构造型之一,用于创建与数据库访问相关的 bean。我们需要使用@EnableJpaRepositories注释启用弹簧数据。如果我们使用基于 XML 的命名空间,那么我们可以使用以下配置: <?x
最近,我一直在一个项目中工作,该项目需要审核所有数据库事务,包括用户名。为此,我一直在使用Hibernate ORM Envers,它旨在实现持久类的简单审计/版本控制。 为了在这篇文章中展示如何使用Hibernate Envers,我基于这个Spring boot JPA项目构建了一个示例项目。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可以“直接运行”
Hibernate的Envers是准用于在数据库中国审计日志和保持数据多版本的Hibernate套件项目 启用Envers后,当在应用程序的主表中添加、修改和删除数据时,就会在单独的数据库表中自动存储数据的副本 Envers会侦听Hibernate事件,并且当Hibernate在数据库中存储变更时,Envers会在其专用的表中创建数据的副本和记录一个版本 Envers会将工作单元中(即事务中的所有
envers Spring Data JPA,Spring Security和Envers是我个人喜欢使用的库(我倾向于认为它们在各自的类别中被认为是同类中最好的)。 无论如何,我想实现一个我认为简单的用例:实体必须经过Envers审核,但是修订必须包含发起该操作的用户的身份。 尽管看起来很简单,但要实现这一目标我仍然要克服一些挑战。 本文列出了它们,并提供了可能的解决方案。 软件架构 我使用Sp
envers Envers是一个Hibernate模块,可以将其配置为自动审核对您的实体所做的更改。 因此,每个审核的实体都与修订列表相关联,每个修订都在发生更改时捕获实体的状态。 但是,在我对DAO进行“单元测试”时遇到了一个障碍,这就是我要分享的内容,以避免其他人陷入同一困境。 首先,让我们概述使用Envers所需的几个步骤: 用@Audited注释为您的实体注释: @Entity @Audi
问题内容: 我有3种方式将内容写入数据库 我遇到的问题是为了让Hibernate Envers实际将审核记录写入相应的x_aud和revinfo DB表中。它仅适用于“ .persist()”或“ .merge()”。我无法使其适用于’createQuery(…). executeUpdate() ‘ 我是否缺少某些东西,或者只是无法使用?问题是,我的很多代码都是使用.executeUpdate编
问题内容: 我正在尝试将Envers集成到我的项目中。我正在使用Hibernate-envers 3.5.5-Final,Hibernate-core 3.5.5-Final,spring 3.0.7.RELEASE。 对于DAO层,我使用的是GenericDaoHibernate类。 我的applicationContext.xml包含: 创建带注释的类的审核表,但是通过在实体表中添加或更新一行
问题内容: 我有两个经审计的实体A和B。实体A拥有实体B的集合(注释为一对多关系)。将A的新实例插入数据库时,A和B的所有行都处于同一修订版(假设修订版1)。然后,对A进行了更新,仅影响实体B的实例。因此,更新后,实体A仍处于修订版1,而实体B处于修订版2(包括审核表中的MOD条目) 。在修订版3中,实体A被删除。因为实体B的集合用@Cascade注释,所以属于A的实体B也被删除。 在这种情况
问题内容: 为什么要同时使用?两者都使用还是一个就足够了? 问题答案: 如果您根本不想审核值/关系,请在字段上使用NotAudited。我相信您可以在具有或没有诸如OneToMany,ManyToMany或Column之类的关系的字段上使用它。如果要审核值,请在关系字段上使用RelationTargetAuditMode.NOT_AUDITED,而不要审核关系另一侧的实体。例如,您要审核ID /键
问题内容: 我有一个由Hibernate加载的实体(通过): 此类由Hibernate Envers审核。如何加载用户实体的先前版本? 问题答案: 也许然后(来自AuditReader文档) (我对此很陌生,不确定我是否所有语法都正确,也许size()-1应该是size()-2吗?)
问题内容: 我使用Hibernate Envers审核我的实体。 我有一个审核的实体,它具有as属性。但是,我不想审核实体。因此,我写道: 现在,我要检索的修订: 不幸的是,当我想检索所有数据时(即,当它延迟加载时),我得到了error ,因为它试图查询: 我虽然使用,但Hibernate Envers会保持与 当前 实体项目的链接。 __ 那么如何解决我的问题,而不必显式审核表和(联接表)?在别
问题内容: 我将Hibernate更新为4.1.1.Final版本。根据文档, 有两种方法可以生成数据库模式: 蚂蚁任务。 从Java 运行。 Hibernate- tools不适用于Hibernate-4.1.1.Final。它具有阻止错误。 我只发现发行说明和测试用例。那么如何与我的persistence.xml和Maven一起使用? 更新: 在Hibernate论坛上找到了相关主题。我的问题
问题内容: 我有一个相当复杂的数据库结构,正在尝试进行审核。目前,我正在运行Envers,并且它审核对每个对象所做的更改。这真的很好! 我现在想在用户界面上显示一些审核信息。对象/表变得非常复杂,因此我正在寻找一种方法来查看审核中哪些字段已更改。当前存储每个带有修订ID的对象的快照。我可以查看每个对象的修订版本,然后手动查询以查看发生了什么更改,但是我想知道是否有一种方法可以存储哪些字段已更改。这