Java SpringJPA-如何基于多个列返回不同的结果

Java SpringJPA-如何基于多个列返回不同的结果,java,spring-boot,jpa,spring-data-jpa,Java,Spring Boot,Jpa,Spring Data Jpa,我有一张有点像这样的桌子 Model findFirstByOrderByPersonNameAsc(); 实体名称 年 人名 第一学校 2021 第一人 第一学校 2021 第二人 第一学校 2020 第一人 学校2 2021 第一人 在存储库界面中添加如下方法 Model findFirstByOrderByPersonNameAsc(); 你可以随意点。如果您愿意,还可以返回可选的可选的。要回答我自己的问题,我无法找到不使用CriteriaBuilder和CriteriaQuery的方

我有一张有点像这样的桌子

Model findFirstByOrderByPersonNameAsc();
实体名称 年 人名 第一学校 2021 第一人 第一学校 2021 第二人 第一学校 2020 第一人 学校2 2021 第一人
存储库
界面中添加如下方法

Model findFirstByOrderByPersonNameAsc();

你可以随意点。如果您愿意,还可以返回可选的
可选的

要回答我自己的问题,我无法找到不使用CriteriaBuilder和CriteriaQuery的方法。我必须将CriteriaQuery multiselect和CriteriaQuery distinct结合起来 以下是我的一段代码,可以帮助我处境中的其他人:

public Page<Model> findAllByFilters(final Pageable page,
            final SearchDto searchDto) {
        final CriteriaBuilder cb = em.getCriteriaBuilder();

        final CriteriaQuery<Model> cq = cb.createQuery(Model.class);

        final Root<Model> root = cq.from(Model.class);

        final List<Predicate> predicates = getCustomPredicates(root, cq, cb, searchDto, 
            currentDate, false);
        cq.where(predicates.toArray(Predicate[]::new));
        cq.multiselect(root.get("entityName"), root.get("year"), root.get("personName");
        cq.distinct(true);

        final TypedQuery<Model> tq = em.createQuery(cq);

        // Code for Pagination
        ...

        final List<Model> list = tq.getResultList();
        return new PageImpl<Model>(list, page, count);
    }
公共页面findAllByFilters(最终可分页页面,
最终搜索到搜索到(搜索到){
最终CriteriaBuilder cb=em.getCriteriaBuilder();
最终标准查询cq=cb.createQuery(Model.class);
最终根=cq.from(Model.class);
最终列表谓词=getCustomPredicates(根、cq、cb、searchDto、,
当前日期,假);
cq.where(谓词toArray(谓词[]::new));
cq.multiselect(root.get(“entityName”)、root.get(“year”)、root.get(“personName”);
cq.distinct(真);
最终类型DQuery tq=em.createQuery(cq);
//分页代码
...
最终列表=tq.getResultList();
返回新的PageImpl(列表、页面、计数);
}

我更新了我的问题。我需要能够使用规范和分页。而且,findFirst不会只返回一个结果吗?每个实体名称我需要一个结果啊,好的。我一定是看错了你的问题。Is
query.groupBy(列名称);
不适合您?据我所知,Criteria API不支持distinct with multiselect