6.4. Configuration


6.4.1. 配置端点参数

JBoss EAP 通过 Hibernate Envers 使用实体审计来跟踪永久类的历史更改。

配置可用的端点参数

  1. 打开 应用的 persistent.xml 文件。
  2. 根据需要添加、删除或配置 Envers 属性。有关可用属性列表,请参阅 Envers Configuration Properties

    示例:结束参数

    <persistence-unit name="mypc">
      <description>Persistence Unit.</description>
      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
      <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
      <properties>
        <property name="hibernate.hbm2ddl.auto" value="create-drop" />
        <property name="hibernate.show_sql" value="true" />
        <property name="hibernate.cache.use_second_level_cache" value="true" />
        <property name="hibernate.cache.use_query_cache" value="true" />
        <property name="hibernate.generate_statistics" value="true" />
        <property name="org.hibernate.envers.versionsTableSuffix" value="_V" />
        <property name="org.hibernate.envers.revisionFieldName" value="ver_rev" />
      </properties>
    </persistence-unit>
    Copy to Clipboard Toggle word wrap

6.4.2. 在运行时启用或禁用审计

在运行时启用或禁用实体版本审核

  1. 子类 AuditEventListener 类。
  2. 覆盖在 Hibernate 事件中调用的以下方法:

    • onPostInsert
    • onPostUpdate
    • onPostDelete
    • onPreUpdateCollection
    • onPreRemoveCollection
    • onPostRecreateCollection
  3. 将子类指定为事件的监听程序。
  4. 确定是否应审计更改。
  5. 如果更改应该被审计,则将调用传递到超级类。

6.4.3. 配置条件审计

Hibernate Envers 使用一系列事件监听器以对各种 Hibernate 事件的响应保留审计数据。如果 Envers JAR 在类路径中,则这些监听程序会自动注册。

实施条件审计

  1. persistence .xml 文件中将 hibernate.listeners.envers. autoRegister Hibernate 属性设置为 false。
  2. 子类要覆盖的每个事件监听程序。将条件审计逻辑放在子类中,并在应当执行审计时调用超级方法。
  3. 创建 org.hibernate.integrator.spi.Integrator 的自定义实施,类似于 org.hibernate.envers.event.EnversIntegrator。使用在第 2 步中创建的事件监听器子类,而不是默认的类。
  4. META-INF/services/org.hibernate.integrator.spi.Integrator 文件添加到 JAR。此文件应当包含实施接口的类的完全限定名称。

6.4.4. Envers 配置属性

Expand
表 6.1. 实体数据版本配置参数
属性名称默认值描述

org.hibernate.envers.audit_table_prefix

 

在被审计实体名称前加上字符串,以创建保存审计信息的实体的名称。

org.hibernate.envers.audit_table_suffix

_AUD

附加到已审计实体名称的字符串,以创建保存审计信息的实体的名称。例如,如果对表名称为 Person 的实体进行了审计,Envers 将生成名为 Person_AUD 的表来存储历史数据。

org.hibernate.envers.revision_field_name

REV

包含修订号的审计实体中的字段名称。

org.hibernate.envers.revision_type_field_name

REVTYPE

存放修订类型的审计实体中的字段名称。当前可能的修订类型有: 添加、修改 传送 以分别插入、修改或删除。

org.hibernate.envers.revision_on_collection_change

true

此属性决定是否应生成修订项,如果关系字段未拥有的更改。这可以是一对多关系中的集合,也可以是使用一对一关系中的 mapping By 属性的字段。

org.hibernate.envers.do_not_audit_optimistic_locking_field

true

为 true 时,用于开放式锁定的属性(使用 @Version标注)将自动从审计中排除。

org.hibernate.envers.store_data_at_delete

false

此属性定义在删除实体时是否应将实体数据存储在修订中,所有其他属性均标记为 null(而非 ID)。这通常不需要,因为数据存在于最后一处的修订版本中。但有时候,在最后一个修订版本中访问它更为简单和高效。但是,这意味着在删除前包含的数据被存储两次。

org.hibernate.envers.default_schema

Null(与普通表相同)

用于审计表的默认架构名称。可以使用 @AuditTable(schema="…​") 注释覆盖。如果不存在,则架构将与普通表的架构相同。

org.hibernate.envers.default_catalog

Null(与普通表相同)

应用于审计表的默认目录名称。可以使用 @AuditTable(catalog="…​") 注释覆盖。如果没有,目录将与普通表的目录相同。

org.hibernate.envers.audit_strategy

org.hibernate.envers.strategy.DefaultAuditStrategy

此属性定义在持久保留审计数据时应使用的审计策略。默认情况下,仅存储了实体修改的修订版本。另外,org.hibernate.envers.strategy.ValidityAuditStrategy 存储 start 修订版本和结尾修订版本。它们一起定义审计行何时有效。

org.hibernate.envers.audit_strategy_validity_end_rev_field_name

REVEND

在审计实体中保存最终修订版本的列名称。只有使用了有效期审计策略时,此属性才有效。

org.hibernate.envers.audit_strategy_validity_store_revend_timestamp

false

此属性定义除结束修订本身外,是否应将最终修订的时间戳(数据在最后有效的位置)存储下来。这对于使用表分区从关系数据库中清除旧的审计记录非常有用。分区需要表中存在的列。只有在使用了Validity AuditStrategy 时才会评估此属性。

org.hibernate.envers.audit_strategy_validity_revend_timestamp_field_name

REVEND_TSTMP

结束修订版本时间戳的列名称,即数据仍有效。只有在使用了Validity AuditStrategy 时才使用,org.hibernate.envers.audit_strategy_validity_store_revend_timestamp 评估为 true。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat