2

假设我们有一个实体:

@Entity
public class Person implements Serializable {

    @Id
    private String name;
    private Long age;
    private Boolean isMad;
...
}

以及一个用于自定义查询的简单(且不必要)示例的存储库:

@Repository
public interface PersonRepository extends PagingAndSortingRepository<Info, String> {

    @Query("select p.isMad, count(*) from Person p group by p.isMad")
    List<Object> aggregateByMadness();
}

现在要解析这个列表,我们需要做这样的事情:

for (Object element : list) {
    Object[] result = (Object[]) element;
    Boolean isMad = (Boolean) result[0];
    Long count = (Long) result[1];
}

这很痛苦,我们可以将查询结果直接转换为 POJO 的列表吗?

4

1 回答 1

2

是的,您可以使用JPQL 构造表达式

package com.foo;

public class Madness {

    public Madness(boolean isMad, Number count) { /* ...*/ }
}

在您的存储库中:

@Query("select new com.foo.Madness(p.isMad, count(*)) from Person p group by p.isMad")
List<Madness> aggregateByMadness();
于 2013-06-04T19:50:56.703 回答