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

使用Hibernate envers查找最近删除的实体

Hibernate Envers是一个用于实体版本控制的开源框架。它可以帮助开发人员跟踪和管理实体对象的历史变化,包括创建、更新和删除操作。通过使用Hibernate Envers,开发人员可以轻松地查找最近删除的实体。

Hibernate Envers的主要特点包括:

  1. 版本控制:Hibernate Envers可以自动创建实体对象的版本历史记录。每次对实体对象进行更改时,都会生成一个新的版本,并将其存储在历史表中。
  2. 查询历史记录:开发人员可以使用Hibernate Envers提供的API来查询实体对象的历史记录。这包括查询特定版本的实体对象,查询特定时间段内的实体对象,以及查询最近删除的实体对象。
  3. 审计信息:Hibernate Envers还可以记录每个版本的实体对象的审计信息,例如谁进行了更改、何时进行了更改以及更改的具体内容。

使用Hibernate Envers查找最近删除的实体的步骤如下:

  1. 配置Envers:在Hibernate配置文件中,启用Envers并为需要进行版本控制的实体对象添加@Audited注解。
  2. 查询最近删除的实体:使用Envers提供的API,通过指定查询条件来获取最近删除的实体对象。可以使用AuditReader接口的createQuery()方法来创建查询,并使用add()方法添加查询条件。

下面是一个示例代码片段,演示如何使用Hibernate Envers查找最近删除的实体:

代码语言:java
复制
// 创建AuditReader对象
AuditReader auditReader = AuditReaderFactory.get(entityManager);

// 创建查询
AuditQuery query = auditReader.createQuery()
    .forDeletedEntities()
    .add(AuditEntity.revisionType().eq(RevisionType.DEL));

// 添加查询条件
query.add(AuditEntity.property("propertyName").eq(propertyValue));

// 执行查询
List<Object[]> results = query.getResultList();

// 处理查询结果
for (Object[] result : results) {
    Object deletedEntity = result[0];
    Object revisionEntity = result[1];
    // 处理删除的实体对象和版本信息
}

在腾讯云的生态系统中,没有直接与Hibernate Envers相对应的产品或服务。然而,腾讯云提供了一系列与云计算和数据库相关的产品,如云数据库 TencentDB、云服务器 CVM、云原生容器服务 TKE、云存储 COS 等,可以与Hibernate Envers结合使用,以构建完整的应用解决方案。

更多关于腾讯云产品的信息,请访问腾讯云官方网站:https://cloud.tencent.com/

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

相关·内容

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

通过对实体的审计,不仅可以记录数据的新增、更新和删除操作,还可以实现对这些操作的详细跟踪。...此依赖项提供了Hibernate Envers的支持,它负责实体版本控制和审计功能。实体配置将@Audited注解应用于您希望审计的实体类。...审计表中的字段包括:REV: 修订号(递增)REVTYPE: 修订类型(插入、更新、删除)AUDITEDFIELD: 审计字段的值MODIFIEDBY: 进行修改的用户MODIFIEDDATE: 修改的日期和时间检索审计数据使用...它允许与实体的审计历史进行交互。findRevisions: 这是Hibernate Envers提供的方法,用于检索给定实体的所有修订记录。...在Hibernate Envers中,当为实体启用审计功能时,它会生成一个对应的审计实体,默认情况下带有后缀“_AUD”。这个审计实体会跟踪原始实体随时间的所有更改。

20310

使用 Hibernate 实现软删除的最佳方式

使用 Hibernate 实现软删除的最佳方式 1、引言 每个数据库应用程序都是独特的。虽然大多数时候删除记录是最好的方法,但有时应用程序的要求是数据库记录永远不应该被物理删除。...在这种情况下,Hibernate 允许你简化软删除的实现,本篇文章将解释实现逻辑删除机制的最佳方式。...如果你的实体正在使用乐观锁定的 @Version 属性,那么请查看这篇文章,了解如何将版本属性映射到你的实体中。...@Where 子句用于实体查询,我们希望提供它,以便 Hibernate 可以附加 deleted 列过滤条件来隐藏已删除的行。...子实体可能已被删除,因此在获取集合时我们需要隐藏它。 8、双向 @ManyToMany 关联 同样,因为我们使用的是双向关联,所以不需要在子关系级别应用 @Where 注解。

7400
  • Spring Boot整合Ehcache实现缓存功能

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

    4.4K10

    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 Boot+JPA+Mysql完成数据库整合操作

    Specification:是Spring Data JPA提供的一个查询规范, 要做复杂的查询,类似hibernate QBC查询 Spring Data JPA的使用十分简单,只需要我们编写...开发者只是多写了 "Crud" 四个字母,即刻便为域对象提供了开箱即用的十个增删改查方法。 但是,使用 CrudRepository 也有副作用,它可能暴露了你不希望暴露给业务层的方法。...比如某些接口你只希望提供增加的操作而不希望提供删除的方法。...Pageable 或 Sort 类型的参数,用于指定分页或排序信息即可,这比直接使用 PagingAndSortingRepository 提供了更大的灵活性。...", "true"); hibernateProperties.setProperty("org.hibernate.envers.global_with_modified_flag",

    2.4K20

    hibernate5新特性展示

    想要连接更多关于新的引导API配置指南可到hibernate 官网的User Guide部分 在一定的限制上,Configuration配置方法仍然可以使用,不过它的一些方法已被删除。...从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.

    1.4K40

    springdata入门(纯赶货)

    建议使用@Query,可读性较高接口清单 JpaRepository接口提供的方法与说明方法描述List\ findAll();查找所有实体。...List\ findAll(Sort var1);排序、查找所有实体。List\ findAllById(Iterable var1);返回制定一组ID的实体。...long count();返回实体的数量void deleteById(ID var1);根据ID删除数据。void delete(T var1);删除给定的实体。...extends T> var1);删除实体。void deleteAll();删除所有实体。开发建议这里列出的是常用方法CrudRepository 中的findAll() 方法要慎用。...语句(HQL)1 查询时使用的是实体类的字段,而不是数据库中的字段2 变量使用:变量名的形式,在方法参数中还有使用@Param("xx")3 更新操作需要加上 @Modifying--接口代码--//查找用户

    60820

    hibernate二级缓存作用、配置

    ● 当Hibernate根据ID访问数据对象的时候,首先会从Session一级缓存中查找,如果查不到并且配置了二级缓存,那么会从二级缓存中查找,如果还查不到,就会查询数据库,把结果按照ID放入到缓存中。...:缓存算法,有LRU(默认)、LFU、LFU 关于缓存算法,常见有三种: ● LRU:(Least Rencently Used)新来的对象替换掉使用时间算最近很少使用的对象 ● LFU:(Least...> 和实体并发策略有相同含义; 但集合缓存只缓存集合元素的标识符,在二级缓存中只存放相应实体的标识符,然后再通过标识符去二级缓存查找相应的实体最后组合为集合返回 Collection的缓存和前面查询缓存的...使用二级缓存的前置条件 对于那些查询非常多但插入、删除、更新非常少的应用程序来说,查询缓存可提升性能。但写入多查询少的没有用,总失效。...这个限制相当的棘手,有时候hibernate做批量更新、删除很慢,但是你却不能自己写jdbc来优化。

    1K20

    实战:应用对持久数据访问| 从开发角度看应用架构9

    二、Java对持久数据的访问方式 前文已经提到,Java应用对应用数据的访问,最终通过ORM方式实现。 ? 而ORM的实现,通过JPA的标准,底层使用Hibernate等技术。...Removed State:持久实体可以通过多种方式从数据库表中删除。 当提交事务或调用实体管理器的remove方法时,可以从数据库表中删除一个托管实体实例。 一个实体然后处于移除状态。...javax.persistence.EntityManager API用于创建新的实体实例,通过主键查找实体实例,通过实体实例进行查询以及删除现有的实体实例。...要删除分离的实体,请调用一个返回受管实例的find()方法,然后调用remove()方法。...JPA提供程序在启动时使用JNDI查找服务按名称查找数据源。 4可以在属性元素中设置其他标准或特定于供应商的属性。 hibernate.Dialect属性指定使用哪个数据库。

    1.6K30

    Spring Boot第八章-Spring Data JPA

    前言: 最近比较忙,拖了好久才开始写springboot相关的博客,springboot实战那本书已经练习完毕,感觉挺有意思的,从第八章开始才是后端最关心的部分,经常用到。...Hibernate是数据访问解决技术的绝对霸主,使用O/R映射(Object-Relational Mapping) 技术实现数据访问,O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力...JPA的主要实现由Hibernate、EclipseLink和OpenJPA等,这也意味着我们只要使用JPA来开发,无论哪一个开发方式都是一样的。...根据实体类维护数据表结构的功能 #create:启动时删除上一次生成的表,并根据实体类生成表,表中数据会被清空 #create-drop:启动时根据实体类生成表,sessionFactory关闭时表会被删除...,可以直接保存 * 保存单个,多个,根据id查找,id列表查找,查找所有,判断是否存在,计算总数,根据id删除,删除对象,删除一堆对象,删除所有等等, * 自带很多实现,不需要我们单独写了

    3.3K20

    10 个影响程序性能的Hibernate 错误,学会让你少走弯路

    这迫使Hibernate对所有被管理的实体执行脏检查,并为所有未决的插入、更新或删除操作创建和执行SQL语句。这会减慢应用程序,因为它阻止了Hibernate使用一些内部优化。...错误9:逐个更新或删除巨大的实体列表 在你看着你的Java代码时,感觉逐个地更新或删除实体也可以接受。这就是我们对待对象的方式,对吧?...不幸的是,用JPA和Hibernate操作起来则没有那么容易。每个实体都有自己的生命周期,而你如果要更新或删除多个实体的话,则首先需要从数据库加载它们。...幸运的是,你可以使用JPQL、原生SQL或Criteria查询对JPA和Hibernate执行相同的操作。 但是它有一些你应该知道的副作用。在数据库中执行更新或删除操作时,将不使用实体。...正如我在最近的测试中显示的那样,即使你读取了相同的数据库列,DTO projections也比实体快得多。 在SELECT子句中使用构造函数表达式而不是实体只是一个小小的改变。

    2.1K50

    【Hibernate那点事儿】—— Hibernate知识总结

    总结的知识点: 1 关于hibernate映射的实体类标识符访问权限   2 关于对象描述标识符OID及其生成策略   3 Session缓存——清理缓存   4 Session中的状态变更...这种方式生成的主键一般是由hibernate完成的,所以我们在编写实体对象的时候,id的get和set方法权限应该注意: class XXX{ private long id; public long...由于hibernate在访问实体模型时,是不考虑权限的,因此这样就避免了用户指定主键。   另外一个知识点就是,如果不通过property指定一个列,而使用field。...删除对象:OID不为null、从Session中删除、有相关记录、已经计划从数据库中删除、清理缓存就会执行删除、不能再使用。...merge()   对象的复制,它首先获取到OID,然后去session中查找是否存在这样的对象,如果存在直接修改或者使用;如果不存在,就复制这个对象的属性。

    1.1K80

    Spring Boot 正确中使用JPA实战

    JPA通过JDK 5.0注解描述对象-关系表的映射关系,并将运行期的实体对象持久化到数据库中。...简单方便 JPA的主要目标之一就是提供更加简单的编程模型:在JPA框架下创建实体和创建 Java 类一样简单,没有任何的约束和限制,只需要使用 javax.persistence.Entity 进行注释...查询能力 JPA的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询语句,可以看成是Hibernate HQL的等价物。...JPA定义了独特的JPQL(Java Persistence Query Language),JPQL是EJB QL的一种扩展,它是针对实体的一种查询语言,操作对象是实体,而不是关系数据库的表,而且能够支持批量更新和修改...高级特性 JPA 中能够支持面向对象的高级特性,如类之间的继承、多态和类之间的复杂关系,这样的支持能够让开发者最大限度的使用面向对象的模型设计企业应用,而不需要自行处理这些特性在关系数据库的持久化。

    1.5K20
    领券