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不会只返回一个结果吗?每个实体名称我需要一个结果啊,好的。我一定是看错了你的问题。Isquery.groupBy(列名称);
不适合您?据我所知,Criteria API不支持distinct with multiselect