gpt4 book ai didi

java - JPA Criteria Query API 和两列排序

转载 作者:IT老高 更新时间:2023-10-28 20:46:40 30 4
gpt4 key购买 nike

我遇到了一个简单的问题;苦苦挣扎如何在 join ed 实体上调用 order by。本质上,我正在尝试使用 JPA Criteria 实现以下目标:

select distinct d from Department d 
left join fetch d.children c
left join fetch c.appointments a
where d.parent is null
order by d.name, c.name

我有以下几点:

CriteriaBuilder cb = getEntityManager().getCriteriaBuilder();
CriteriaQuery<Department> c = cb.createQuery(Department.class);
Root<Department> root = c.from(Department.class);
Fetch<Department, Department> childrenFetch = root.fetch(
Department_.children, JoinType.LEFT);
childrenFetch.fetch(Department_.appointments, JoinType.LEFT);

c.orderBy(cb.asc(root.get(Department_.name)));
c.distinct(true);
c.select(root);
c.where(cb.isNull(root.get(Department_.parent)));

Criteria API如何实现order by d.name, c.name?我尝试了 Expression, Path 但没有用。任何指针将不胜感激。

最佳答案

如果您需要添加几个订单,您可以执行类似的操作(但针对您的查询和不同的根对象)

CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Route> query = criteriaBuilder.createQuery(Route.class);
Root<Route> routeRoot = query.from(Route.class);
query.select(routeRoot);

List<Order> orderList = new ArrayList();
query.where(routeRoot.get("owner").in(user));

orderList.add(criteriaBuilder.desc(routeRoot.get("date")));
orderList.add(criteriaBuilder.desc(routeRoot.get("rating")));

query.orderBy(orderList);

关于java - JPA Criteria Query API 和两列排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18389378/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com