Hibernate 过滤器及;Spring数据Jpa中group by查询的分页

Hibernate 过滤器及;Spring数据Jpa中group by查询的分页,hibernate,spring-data-jpa,hibernate-mapping,hibernate-criteria,Hibernate,Spring Data Jpa,Hibernate Mapping,Hibernate Criteria,我有一个实体如下: @Entity public class Something { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String field1; private String field2; private String field3; //@Getters and @Setters } 我需要在字段

我有一个实体如下:

@Entity
public class Something {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Integer id;

    private String field1;
    private String field2;
    private String field3;
    //@Getters and @Setters
}
我需要在字段1、字段2和字段3上使用可选的过滤器。我还需要对数据进行分页,并返回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;
类似地,对于字段1和字段2上的过滤器

问题:

  • 要执行的查询取决于筛选器的数量

  • 查询的返回类型不是实体

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

    由于问题2

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

    我目前的解决方案:

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

    List<Object[]> resultData = entityManager.createNativeQuery(query).getResultList();
    
    List resultData=entityManager.createNativeQuery(query.getResultList();
    
    它可以工作,但问题是:它返回列表,我必须手动将字段转换为正确的类型,并创建所需结果的列表


    有人能帮我吗。如果有其他有效的解决方案/方法,请让我知道。如果使用entityManager没有问题,请告诉我,我应该做什么,以便它返回我的列表而不是列表。

    “我应该做什么,以便它返回我的列表而不是列表。”应该是“
    List
    而不是
    List
    ”?它不返回列表,而是返回列表。这就是问题的全部。所以如果我使用List,我就不能在它上面使用getter。当我像这样使用任何getter:result.get(0).getField3()时,我会得到以下异常:java.lang.ClassCastException:[Ljava.lang.Object;无法强制转换为com.project.model.ResultClass“我应该做什么,以便它返回列表而不是列表。”应该是“
    List
    而不是
    List
    ”?它不返回列表,它返回列表。这就是问题的全部。因此,如果我使用列表,我就不能在其上使用getter。当我使用任何像这样的getter:result.get(0)。getField3()时,我得到以下异常:java.lang.ClassCastException:[Ljava.lang.Object;无法转换为com.project.model.ResultClass