gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:31:10 27 4
gpt4 key购买 nike

所以我的问题是我需要找到特定类的所有最近删除的实体,即自特定时间戳以来已删除的实体。具体来说,我想查找在过去一小时内删除的实体。

我所有的实体都有一个创建和更新的时间戳,我用一个监听器正确维护它:

@NotNull
@Column(name = "updated")
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime updated;

我还使用 Envers 并注释我的实体。

所以猜测,我的查询应该这样开始:

// Query for deleted bookings
AuditReader reader = AuditReaderFactory.get(entityManager);
AuditQuery query = reader.createQuery()
.forRevisionsOfEntity(Booking.class, false, true)

但我不知道在这里放什么来查找自 DateTime 以来已删除的预订。

最佳答案

首先,获取一小时前的时间戳(以毫秒为单位):

long timestamp = (System.getCurrentTimeMillis()) - (60*60*1000);

然后可以相对于时间戳进行查询:

AuditReader reader = AuditReaderFactory.get(entityManager);
AuditQuery query = reader.createQuery()
.forRevisionsOfEntity(Booking.class, false, true)
.add(AuditEntity.revisionProperty("timestamp").gt(timestamp)
.add(AuditEntity.revisionType().eq(RevisionType.DEL));

List<Object[]> results = query.getResultList();

获取修订数据。每个 Object[] 都有

  1. 修订元数据(DefaultRevisionEntity 或使用 @RevisionEntity(CustomRevisionListener.class) 注释的您自己的类)
  2. 实体实例(在本例中为 Booking)
  3. RevisionType,我们知道在这种情况下它总是DEL

关于java - 使用 Hibernate envers 查找最近删除的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6531407/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com