如何按特定字段过滤 PanacheQuery?
How can I filter a PanacheQuery by specific fields?
我想排序、过滤和分页一个PanacheQuery:
@GET
public Response listAllPaged(@BeanParam PagedRequest req) {
// Sorting
PanacheQuery<MyEntity> all = MyEntity.findAll(Sort.by(req.sortBy, Sort.Direction.Ascending));
// Filtering
[...] ? I want to keep only results where req.filterBy == req.filterValue
// Paging
List<MyDTO> list = all
.page(Page.of(pagedRequest.pageNum, pagedRequest.pageSize))
.stream()
.map(myMapper::toDto)
.collect(Collectors.toList());
return Response.ok().entity(new PagedResponse<>(all.count(), list)).build();
}
PanacheQuery 有一个 .filter() 方法,但据我所知,这是用于预定义的 Hibernate 过滤器。
我想用字段值对过滤我的结果,像这样:
all.filter("status", "alive")
all.filter("age", "25")
我找不到很多关于如何实现这一点的示例,而且 Quarkus Panache 文档在这个主题上相当安静。有什么建议吗?
由于 Panache 不支持 JPA Criteria / Predicates,我最终自己构建了查询,例如 。
我想排序、过滤和分页一个PanacheQuery:
@GET
public Response listAllPaged(@BeanParam PagedRequest req) {
// Sorting
PanacheQuery<MyEntity> all = MyEntity.findAll(Sort.by(req.sortBy, Sort.Direction.Ascending));
// Filtering
[...] ? I want to keep only results where req.filterBy == req.filterValue
// Paging
List<MyDTO> list = all
.page(Page.of(pagedRequest.pageNum, pagedRequest.pageSize))
.stream()
.map(myMapper::toDto)
.collect(Collectors.toList());
return Response.ok().entity(new PagedResponse<>(all.count(), list)).build();
}
PanacheQuery 有一个 .filter() 方法,但据我所知,这是用于预定义的 Hibernate 过滤器。
我想用字段值对过滤我的结果,像这样:
all.filter("status", "alive")
all.filter("age", "25")
我找不到很多关于如何实现这一点的示例,而且 Quarkus Panache 文档在这个主题上相当安静。有什么建议吗?
由于 Panache 不支持 JPA Criteria / Predicates,我最终自己构建了查询,例如