hibernate - Spring Data Jpa中按查询分组的过滤器和分页
问题描述
我有一个实体如下:
@Entity
public class Something {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
private String field1;
private String field2;
private String field3;
//@Getters and @Setters
}
我需要在 field1、field2 上使用可选过滤器并在 field3 上使用 group by。我还需要对数据进行分页并返回 count(*) 和 field3 值。相同的 sql 查询是(没有过滤器):
select field3, count(*) as number from something group by field3 LIMIT 0,10;
带 1 个过滤器:
select field3, count(*) as number from somethhing where field1=:field1 group by field3 LIMIT 0,10;
同样,对于 field1 和 field2 上的过滤器。
问题:
要执行的查询取决于过滤器的数量。
查询的返回类型不是实体。
由于问题 1,我不能使用直接转换为查询的 spring 数据方法。出于同样的原因,我也不能使用@Query。我不能在我的存储库中为每个可能的组合编写 2^n 个查询,其中 n 是过滤器的数量。
由于问题2,
我不能使用规范。我没有找到返回一组特定字段和聚合函数的规范的任何解决方案。
到目前为止我的解决方案:
我使用了 entitymanager 并根据参数的数量创建了一个查询。现在我像这样使用它:
List<Object[]> resultData = entityManager.createNativeQuery(query).getResultList();
它有效,但问题是:它返回列表,我必须手动将字段转换为正确的类型并创建所需结果的列表。
有人可以在这里帮助我。如果有其他可行的解决方案/方法,请告诉我。如果使用 entityManager 没问题,那么请告诉我,我应该怎么做,以便它返回给我 List 而不是 List。
解决方案
推荐阅读
- java - Hibernate 多对多添加重复项
- javascript - Angular 如何存储未链接到变量的可观察对象?
- c# - 如何从 Windows.UI.Colors 中获取 Window.UI.Color?
- audio - 我如何知道哪些频谱图帧属于哪些音频样本?
- javascript - 将 JS 模块导入 Web 浏览器脚本
- r - dyn.load(dll_copy_file) 中的错误——通过 linux 系统构建 R 包时出错
- html - 如果在过滤数据时删除表格行,我是否也应该将其从未过滤的数据中删除?Angular - 模板驱动形式
- instagram - 不要在新的 Instagram url-api 上为位置 (?__a=1) (native_location_data) 工作分页
- css - 具有动态高度的 div 的 CSS 线性渐变
- python - 我现在正在使用 Automate the Boring Stuff With Python 中的 pyautogui 模块。我的代码一直告诉我 pyscreez 没有属性 locateOnWindow