首页 > 解决方案 > 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. 要执行的查询取决于过滤器的数量。

  2. 查询的返回类型不是实体。

由于问题 1,我不能使用直接转换为查询的 spring 数据方法。出于同样的原因,我也不能使用@Query。我不能在我的存储库中为每个可能的组合编写 2^n 个查询,其中 n 是过滤器的数量。

由于问题2,

我不能使用规范。我没有找到返回一组特定字段和聚合函数的规范的任何解决方案。

到目前为止我的解决方案:

我使用了 entitymanager 并根据参数的数量创建了一个查询。现在我像这样使用它:

List<Object[]> resultData = entityManager.createNativeQuery(query).getResultList();

它有效,但问题是:它返回列表,我必须手动将字段转换为正确的类型并创建所需结果的列表。

有人可以在这里帮助我。如果有其他可行的解决方案/方法,请告诉我。如果使用 entityManager 没问题,那么请告诉我,我应该怎么做,以便它返回给我 List 而不是 List。

标签: hibernatespring-data-jpahibernate-mappinghibernate-criteria

解决方案


推荐阅读