首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate Envers:如何捕获是谁删除了审计表中的实体

Hibernate Envers是一个用于实现数据审计的开源框架。它可以帮助开发人员跟踪和记录数据库中实体对象的变化历史,包括创建、更新和删除操作。

在使用Hibernate Envers时,可以通过以下步骤来捕获是谁删除了审计表中的实体:

  1. 配置Hibernate Envers:首先,需要在Hibernate配置文件中启用Envers。可以通过添加相应的配置来实现,例如在hibernate.cfg.xml文件中添加以下配置:
代码语言:txt
复制
<property name="org.hibernate.envers.audit_table_suffix" value="_AUD" />
<property name="org.hibernate.envers.revision_field_name" value="REV" />
<property name="org.hibernate.envers.revision_type_field_name" value="REVTYPE" />
  1. 创建审计表:Hibernate Envers会自动为每个需要审计的实体创建一个对应的审计表。审计表的命名规则是在原实体表名后面加上"_AUD"后缀。例如,如果原实体表名为"User",则对应的审计表名为"User_AUD"。
  2. 删除实体并查询审计表:当删除一个实体时,Hibernate Envers会将删除操作记录到审计表中。可以通过查询审计表来获取删除操作的相关信息,包括删除的实体、删除时间和执行删除操作的用户。

以下是一个示例查询审计表的代码:

代码语言:txt
复制
AuditReader auditReader = AuditReaderFactory.get(entityManager);
List<Number> revisions = auditReader.getRevisions(User.class, userId);
for (Number revision : revisions) {
    User_AUD userAud = auditReader.find(User_AUD.class, userId, revision);
    // 获取删除操作的相关信息,如删除时间和执行删除操作的用户
    Date deleteTime = userAud.getRevisionDate();
    String deletedBy = userAud.getRevisionUser();
    // 其他操作...
}

在上述代码中,User_AUD是审计表对应的实体类,可以通过AuditReader来查询审计表的数据。

推荐的腾讯云相关产品:腾讯云数据库MySQL版、腾讯云对象存储COS。

腾讯云数据库MySQL版:腾讯云提供的MySQL数据库服务,具备高可用、高性能、高安全性的特点,适用于各种规模的应用场景。详情请参考腾讯云数据库MySQL版

腾讯云对象存储COS:腾讯云提供的对象存储服务,可用于存储和管理大规模的非结构化数据,如图片、音视频文件等。详情请参考腾讯云对象存储COS

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用 @Audited 注解增强 Spring Boot 应用,打造健壮数据审计功能

本文将深入探讨如何通过@Audited注解和spring-data-envers实现实体审计,并详细展示其在实际项目中应用步骤。...Hibernate Envers生成审计通常包含字段,如REV(修订号)、REVTYPE(修订类型)、AUDIT_TIMESTAMP(审计时间戳)等。...在Hibernate Envers,当为实体启用审计功能时,它会生成一个对应审计实体,默认情况下带有后缀“_AUD”。这个审计实体会跟踪原始实体随时间所有更改。...从依赖引入、实体配置,到如何通过Spring Data JPA及Hibernate Envers获取审计数据,每一个步骤都展示了这个工具灵活性和强大功能。...因此,这行代码实际上在查询具有给定ID实体所有修订历史,并将结果存储在审计实体列表。然后,可以使用该列表来分析或显示不同修订版本对实体所做更改。

16410
  • Hibernate 5 模块包(modulesartifacts)

    Hibernate 功能被拆分成一系列模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。...模块名称 说明 hibernate-core 这个 Hibernate 主要(main (core))模块。定义了 ORM 特性和 API 以及一系列整合 SPIs。...hibernate-envers Hibernate 历史实体版本特性 hibernate-spatial Hibernate Spatial/GIS 数据类型支持 hibernate-osgi...整合 Proxool 连接池库到 Hibernate hibernate-jcache 整合 JCache 缓存特性到 Hibernate,使任何与其兼容缓存实现能够成为 Hibernate 二级缓存提供者...hibernate-ehcache 整合 Ehcache 缓存库到 Hibernate 成为 Hibernate 二级缓存提供者 https://www.cwiki.us/display/HIBERNATE

    47220

    什么时候我们需要软删除?

    阅读完本文你将会学会 什么软删除? 如何考量是否使用软删除 如何在Spring里实现软删除 1. 前言 我们在开发程序过程,会遇到一个常见需求——删除数据。...在本文中,笔者将会带你学习软删除以及如何用Spring Data JPA实现它。 2. 什么软删除(Soft Delete)?...举个例子,order会有一个相应order_deleted,在删除order数据,将数据复制到order_deleted。...再级联下去,这些订单对应所有发票也要删除吗?就这么一步步下去,是不是公司损益报表也要重做了? 这样看起来明显不合理吧。 那我们在实际业务逻辑是否采用软删除?...@Filter一般用来定义在实体类上。 除了这个改动之外,我们还需要改写下ProductServicefindAll() 方法。

    1.9K30

    hibernate5新特性展示

    hibernate5.0开始Hibernate Spatial已经Hibernate项目的一部分,来使其跟上发展主流,如果你项目需要使用到GIS数据,我们高度推荐你尝试使用hibernate-spatial...支持Java 8 虽然并非完全支持,更准确来说,hibernate5.0增加了对Java 8 Date 和Time API支持,以使我们能够更轻松地完成我们实体映射类配置属性到数据库支持.这种支持通过使用专用利器...我们使用或列没有明确指定一个使用名称 2. org.hibernate.boot.model.naming.PhysicalNamingStrategy:用于转换“逻辑名称”(隐式或显式)或列成一个物理名称...整合了hibernate-envers 5. 集合数值,映射键值 6. 现在能够有效处理null值 7....,org.hibernate.TransactionAPI实现,现在永远不变

    1.4K40

    Spring认证中国教育管理中心-Apache Cassandra Spring 数据教程十

    13.1.基本 Spring Data 提供了复杂支持,以透明地跟踪创建或更改了实体以及更改发生时间。要从该功能受益,您必须为实体类配备审计元数据,这些元数据可以使用注释或通过实现接口来定义。...仅跟踪创建和修改日期应用程序不需要指定AuditorAware. 13.1.1.基于注解审计元数据 我们提供@CreatedBy并@LastModifiedBy捕获创建或修改实体用户,@CreatedDate...审计元数据不一定需要存在于根级实体,但可以添加到嵌入式实体(取决于实际使用存储),如下面的截图所示。 示例 95....为此,我们提供了一个AuditorAwareSPI 接口,您必须实现该接口以告知基础设施当前与应用程序交互用户或系统。...在本章,我们描述了 特性MappingCassandraConverter,如何使用约定将域对象映射到,以及如何使用基于注释映射元数据覆盖这些约定。

    89720

    【SpringBoot】微服务数据持久化方案(SpringBootJPA+Hiberate)

    这篇文章不是 Hibernate 或 JPA 教程,而是一个简单 Spring 教程,介绍如何使用 Spring 对 JPA 和 Hibernate 支持。...Spring data jpa 提供如下能力: 用于自动生成大多数样板查询模式 Repository 接口。 支持标注驱动事务机制。 轻松审计实体。 支持分页、筛选器等。...我们所需要只是一个名为 findBy 方法。 下面 ProductService,它将产品 DTO 作为输入并存储到数据库。...我们还有其他注释 LastModifiedBy 和 LastModifiedOn 来捕获修改审计。...Spring data jpa 一个大模块,并不是所有内容都可以在一篇文章涵盖,在以后博客,我们将看到spring-data-jpa更多功能。

    16410

    补习系列(19)-springboot JPA + PostGreSQL

    注意到两个实体都继承了AuditModel这个类,这个基础类实现了"审计"功能。...审计指对数据创建、变更等生命周期进行审阅一种机制, 通常审计属性包括 创建时间、修改时间、创建人、修改人等信息 AuditModel 定义如下所示: @MappedSuperclass@EntityListeners...@MappedSuperClass 必须,目的是为了让子类定义能拥有继承字段(列) 审计功能“魔力”在于,添加了这些继承字段之后,对象在创建、更新时会自动刷新这几个字段,这些由框架完成,...我们知道,JPA 定义了一套 API 来帮助我们实现灵活查询,通过EntityManager 可以实现各种灵活组合查询。 那么在 Spring Data JPA 框架如何实现呢?...视图 视图操作与基本是相同,只是视图一般只读(没有更新操作)。

    2.2K70

    Spring Boot+JPA+Mysql完成数据库整合操作

    三者之间关系:一个用户可以拥有多个角色,也就是用户和角色之间一对多关系,一个用户只属于一个部门,一个部门可以拥有多个用户,也就是说用户和部门之间多对一关系。...Specification:Spring Data JPA提供一个查询规范, 要做复杂查询,类似hibernate QBC查询 Spring Data JPA使用十分简单,只需要我们编写...针对这种情况,开发者只能退回到 Repository 接口,然后到 CrudRepository 把希望保留方法声明复制到自定义接口中即可(体现了强大灵活性)。...如果有这样需求,则可以继承该接口。 上述四个接口,开发者到底该如何选择?其实依据很简单,根据具体业务需求,选择其中之一。下面写出三个Repository。...", "true"); hibernateProperties.setProperty("org.hibernate.envers.global_with_modified_flag",

    2.4K20

    Spring认证中国教育管理中心-Spring Data JPA 参考文档七

    审计 基本 Spring Data 提供了复杂支持,以透明地跟踪创建或更改了实体以及更改发生时间。要从该功能受益,您必须为实体类配备审计元数据,这些元数据可以使用注释或通过实现接口来定义。...基于注释审计元数据 我们提供@CreatedBy并@LastModifiedBy捕获创建或修改实体用户,@CreatedDate并@LastModifiedDate捕获更改发生时间。...审计元数据不一定需要存在于根级实体,但可以添加到嵌入式实体(取决于实际使用存储),如下面的截图所示。 示例 113....为此,我们提供了一个AuditorAwareSPI 接口,您必须实现该接口以告知基础设施当前与应用程序交互用户或系统。...通常,定义审计元数据基于注释方法首选,因为它侵入性更小且更灵活。 5.1.10. JPA审计 常规审计配置 Spring Data JPA 附带一个实体侦听器,可用于触发审计信息捕获

    1K20

    Spring认证中国教育管理中心-Spring Data Couchbase教程三

    CAS 对客户端不透明,您唯一需要知道它会随着内容或元信息变化而变化。 在其他数据存储,可以通过带有递增计数器任意版本字段来实现类似的行为。...2.5.验证 该库支持 JSR 303 验证,它直接基于实体注释。当然,您可以在服务层添加各种验证,但这样可以很好地与您实际实体耦合。 要使其工作,您需要包含两个额外依赖项。...首先,请注意,只有具有@Version注释字段实体才能被审计以进行创建(否则框架会将创建解释为更新)。...要配置审计,首先需要在上下文中有一个审计感知 bean。所说 bean 必须类型AuditorAware(允许产生一个可以存储在T我们之前看到类型 xxxBy 字段值)。...有关模块特定功能详细信息,请参阅本文档中有关该模块章节。 4.1核心概念 Spring Data 存储库抽象中央接口Repository.

    1.8K30

    Spring Boot整合Ehcache实现缓存功能

    如果该属性值为0,则表示对象可以无限期地处于空闲状态 --> 3、实体类 这里新建一个实体类,用来创造对象存入数据库和缓存。...", storeDataAtDelete); hibernateProperties.setProperty("org.hibernate.envers.global_with_modified_flag...,这个名称就是ehcache.xml内名称; 2)@Cacheable:应用到读取数据方法上,即可缓存方法,如查找方法:先从缓存读取,如果没有再调 用方法获取数据,然后把数据添加到缓存,适用于查找...; 3)@CachePut:主要针对方法配置,能够根据方法请求参数对其结果进行缓存,和 @Cacheable 不同,它每次都会触发真实方法调用。...id=1就可以查询到数据,这时候观察控制台或者日志就可以发现,查询时候并没有去访问数据库,而是直接在缓存查询了,至于更新和删除,道理一样

    4.4K10

    IDEA 下新建 Hibernate 项目

    Hibernate 概述 什么 Hibernate 一个 Java 领域持久化框架 一个 Java 领域ORM 框架 什么持久化 持久化指把对象永久保存到数据库 持久化包括和数据库相关各种操作...(增、、改、查) 什么 ORM ORM 指对象关系映射(Object/Relation Mapping) ORM 将关系数据库中表记录映射成为对象,以对象形式展现,程序员可以把对数据库操作转换为对对象操作...面向对象概念类对应着面向关系概念,对象对应着行,属性对应着列(字段) IDEA 下 Hibernate 开发步骤 创建 Hibernate 项目 ?...在数据库下创建好对应数据 IDEA 下连接对应数据库 ? ? IDEA 下反向生成实体类和对象-关系映射文件(*.hbm.xml) ? ?...文件生成, 但若 .hbm.xml 文件和数据库对应数据结构不同, Hiberante 将更新数据结构,但不会删除已有的行和列 validate : 会和数据库进行比较, 若 .hbm.xml

    92820

    一篇 JPA 总结

    JPA 和 Hibernate 关系 JPA 规范:JPA 本质上一种 ORM 规范,不是 ORM 框架,只是定制了一些规范,提供了一些编程 API 接口,具体实现由 ORM 厂商实现 Hibernate...实现:Hibernate 除了一种 ORM 框架之外,他也是一种 JPA 实现 HelloWorld 步骤 创建 presitence.xml,在这个文件配置持久化单元 指定跟哪个数据库进行交互...指定使用哪个持久化框架以及配置该框架基本属性 创建实体类,使用 annotation 来描述实体类跟数据库之间映射关系 使用 JPA API 完成数据增、、改、查操作 创建 EntityManagerFactory...remove():类似于 Hibernate Session delete 方法,但此方法只可删除持久化对象,而 hibernate 方法可以删除游离对象(不在缓存,但在数据库可能有对象,...关联关系映射(使用 IDEA 可以使用实体生成,也可以使用对应逆向生成实体类) 单向多对一(orders - customer) 结构(oreders 中有 customer 外键映射

    5.6K20

    hibernate关联与级联

    2、关联分类:关联可以分为一对一、一对多/多对一、多对多关联 关联有方向 关联关键点都在外键上 如何建立一对多双向关联 以订单和订单项做案例 一个订单对多个订单项,多个订单项对一个订单 在订单实体需要添加两个属性...: Set orderItems initOrderItems = 0;//0代懒加载 1代立即加载 在订单项实体需要添加一个属性:Order order 定义一对多关系时需要采用接口方式...@Entity //该类被hibernate当做实体给管理 @Table(name="xx_plat_role") //对应数据库 public class Role { @Id...,中间user_role(userId,roleId),user主控方,role从方, 在spring+hibernate环境下,使用Annotation配置 User.java @ManyToMany...mappedBy = "roles") public Set getUsers() { return this.users; } 测试:主控方User删除,user会被删除,user_role关系也会被删除了

    1.3K10

    Spring认证中国教育管理中心-Spring Data R2DBC框架教程四

    15.1.基本 Spring Data 提供了复杂支持,以透明地跟踪创建或更改了实体以及更改发生时间。要从该功能受益,您必须为实体类配备审计元数据,这些元数据可以使用注释或通过实现接口来定义。...仅跟踪创建和修改日期应用程序不需要指定AuditorAware. 15.1.1.基于注解审计元数据 我们提供@CreatedBy并@LastModifiedBy捕获创建或修改实体用户,@CreatedDate...审计元数据不一定需要存在于根级实体,但可以添加到嵌入式实体(取决于实际使用存储),如下面的截图所示。 示例 81....为此,我们提供了一个AuditorAwareSPI 接口,您必须实现该接口以告知基础设施当前与应用程序交互用户或系统。...我们提供了一个ReactiveAuditorAwareSPI 接口,您必须实现该接口才能告诉基础设施当前与应用程序交互用户或系统

    71830

    一个迟来赞,送给JPA。AbstractEntity需要准备些什么?

    关系型数据库其实很讨人厌,尤其在你使用数据库驱动开发模式时。需要首先把给创建好了,然后再使用代码生成器反向生成一堆几乎无法可读代码。当字段有变更时候,又是一番折腾。...我个人曾是非常排斥JPA这种弱化SQL工具,这源于对早起Hibernate版本错误认识。但尝试过mybatis、spring-data-jdbc、jooq后,发现这个东西真的香!...标注为@MappedSuperclass类将不是一个完整实体类,不会映射到数据库,但是它属性都将映射到子类数据库字段。放在这里再合适不过了。...自动填充字段 上面说到createdDate和lastModifiedDate两个字段,其实在使用时候,不需要手动去设值。这两个值,将通过审计功能自动完成。...所以这个系列还有@CreatedBy注解,用来标注创建。你需要在代码组装它们,比如下面的代码,就是从Spring Sercurity获取用户信息。

    1.5K10

    IDEA 下新建 Hibernate 项目

    Hibernate 概述 什么 Hibernate 一个 Java 领域持久化框架 一个 Java 领域ORM 框架 什么持久化 持久化指把对象永久保存到数据库 持久化包括和数据库相关各种操作...(增、、改、查) 什么 ORM ORM 指对象关系映射(Object/Relation Mapping) ORM 将关系数据库中表记录映射成为对象,以对象形式展现,程序员可以把对数据库操作转换为对对象操作...面向对象概念类对应着面向关系概念,对象对应着行,属性对应着列(字段) IDEA 下 Hibernate 开发步骤 创建 Hibernate 项目 ?...在数据库下创建好对应数据 IDEA 下连接对应数据库 ? ? IDEA 下反向生成实体类和对象-关系映射文件(*.hbm.xml) ? ?...如上所示为 IDEA 下自动生成实体类以及配置文件,我们需要在配置文件中加入其他配置,如下(hibernate.cfg.xml) image.png Main 类解析(IDEA 新建 Hibernate

    1.5K90

    走进Java接口测试之持久层框架Spring-data-jpa

    就为最普遍操作而言,除了和字段不同外,语句都是类似的,测试人员需要写大量类似而枯燥语句来完成业务逻辑。...为了解决这些大量枯燥数据库操作语句,我们第一个想到使用 ORM框架,比如: Hibernate。通过整合 Hibernate之后,我们以操作Java实体方式最终将数据改变映射到数据库。...update:最常用属性,第一次加载 hibernate时根据 Entity 类会自动建立起结构(前提先建立好数据库),以后加载 hibernate时根据 model类自动更新结构,即使结构改变了但行仍然存在不会删除以前行...validate:每次加载 hibernate时,验证创建数据库结构,只会和数据库进行比较,不会创建新,但是会插入新值。...创建实体 创建一个 User实体,包含id(主键)、name(姓名)、age(年龄)属性,通过 ORM框架其会被映射到数据库,由于配置了 hibernate.hbm2ddl.auto,在应用启动时候框架会自动去数据库创建对应

    2.5K20

    springboot实战之ORM整合(JPA篇)

    前言 1、什么ORM 对象关系映射(Object Relational Mapping,简称ORM)通过使用描述对象和数据库之间映射元数据,将面向对象语言程序对象自动持久化到关系数据库。...,并将运行期实体对象持久化到数据库。...JPA支持XML和JDK5.0注解两种元数据形式,元数据描述对象和之间映射关系,框架据此将实体对象持久化到数据库。...如果不是此方面的需求建议取值设为none 可选参数 create 启动时数据库,然后创建,退出时不删除数据 create-drop 启动时数据库,然后创建,退出时删除数据,如果不存在报错...,在springboot2版本,默认mysql数据库存储引擎MyISAM,通过把取值设置为org.hibernate.dialect.MySQL5InnoDBDialect,就可以把默认存储引擎切换为

    5.9K20
    领券