gpt4 book ai didi

java - 使用hibernate envers实现分页

转载 作者:行者123 更新时间:2023-11-30 08:32:26 25 4
gpt4 key购买 nike

我写了一个 envers 查询如下;

AuditReader reader = AuditReaderFactory.get(entityManager);
List<Object[]> changes = reader.createQuery()
.forRevisionsOfEntity(cls, true, true)
// Various conditions
.getResultList();

我想做的是在页面中获取结果,就像在 PagingAndSortingRepository<T,ID> 中所做的那样。 ,我几乎可以正常工作,如下所示

int start = page.getOffset();
int end = (start + page.getPageSize()) > history.size() ? history.size() : (start + page.getPageSize());
Page page = new PageImpl<HistoryEntry>(history.subList(start, end), page, history.size());

我的问题是,以这种方式完成后,我无法按预期对数据进行排序,即 size=2&sort=action,desc无论我使用什么值 (asc/desc) 都不会排序。

history是具有以下字段的对象列表;

private String timestamp;
private String userName;
private String objectName;
private String objectType;
private String action;
private String field;
private String oldValue;
private String newValue;

为了通过 envers 实现分页、过滤和排序,这是否需要通过原始 envers 查询来完成,或者分页可以解决这个问题?

最佳答案

看来 PageImpl类期望 List<T>您在构造函数中提供的是给定页面的行的子集,已经预先排序。因此,我们需要将排序操作应用为 Envers 查询的一部分。

List<Object[]> changes = reader.createQuery()
.forRevisionsOfEntity( cls, true, false )
// various predicate conditions
.addOrder( AuditEntity.property( "someField" ).desc() )
.getResultList();

以这种方式应用排序将允许您从结果中为页面选择子集的代码按预期工作。

关于java - 使用hibernate envers实现分页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40135090/

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