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

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的实体的所有修订历史,并将结果存储在审计实体的列表中。然后,可以使用该列表来分析或显示不同修订版本对实体所做的更改。

21110
  • 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

    47420

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

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

    2.1K30

    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.Transaction的API实现,现在是永远不变的。

    1.5K40

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

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

    90120

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

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

    18210

    补习系列(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 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

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

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

    1.8K30

    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

    93120

    一篇 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 接口,您必须实现该接口才能告诉基础设施当前与应用程序交互的用户或系统是谁。

    72130

    一个迟来的赞,送给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,就可以把默认的存储引擎切换为

    6.1K20
    领券