我被一个简单的问题困住了;如何在join
ed实体上调用order by
。基本上,我正试图通过JPA标准实现以下目标:
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)));
如何通过d.name,c.name使用Criteria API
来实现顺序?我尝试了表达式,路径,但不起作用。任何指针都会非常感激。
我在做同样的事情时遇到了困难,我在这页上找到了一个解决方案:http://www.objectdb.com/api/java/jpa/criteria/CriteriaQuery/orderBy_Order_
//javax.persistence.criteria.CriteriaQuery
//CriteriaQuery<T> orderBy(Order... o)
指定用于对查询结果排序的排序表达式。替换之前的排序表达式(如果有)。如果未指定排序表达式,则只需删除之前的排序(如果有),结果将不按特定顺序返回。排序表达式从左到右的顺序决定了优先级,其中最左边的优先级最高。
参数:o-零或多个排序表达式
返回:修改后的查询
自:JPA 2.0
通过使用Criteria API,我对订单也有同样的问题。我找到了这个解决方案:
CriteriaQuery<Test> q = cb.createQuery(Test.class);
Root<Test> c = q.from(Test.class);
q.select(c);
q.orderBy(cb.asc(c.get("name")), cb.desc(c.get("prenom")));
如果你需要添加几个订单,你可以做一些类似的事情(但是对于你的查询和不同的根对象)
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);
我的问题是空值必须是最后一个order by语句。下面是我的代码截图。我使用javax持久性标准生成器。我的问题很复杂。 如何通过criteria builder以零价格完成订单?
我有2个班: 我试图创建一个带有动态order by和参数的查询,例如:我想在DrcommentsPK时选择所有Drcomments记录。commentPrimaryCode等于1,其顺序为DrcommentsPK。注释第二代码。这就是我尝试的: 问题是我得到的结果列表没有按commentSecondaryCode desc顺序排序。。 我做错什么了吗?如何做到这一点?如何创建按eMedTable
我使用JPA criteria API从数据库中获取记录。我有一个实体记录,其字段dateTime可以为空。我会编码: 事实证明,dateTimeField为空的记录首先显示。我使用Postrgres数据库。我会回答这个问题,因为我找到了解决办法。这里有一个类似的帖子。JPA标准查询API和订单(按空)
我最近在尝试按两个同等重要的列排序一个Hibernate Criteria查询时遇到了这个问题。基本上,我的意思是,如果我有一个表,其中一个列是一个日期(createdOnDate),另一个列是一个日期(modifiedOnDate),我希望比较来自Organization Object的orderBy子句中的所有日期。 为此,我这样尝试: 但是它首先根据modified_date对所有组织进行排
我尝试获取所有按标题升序排列的帖子(具有特定自定义类型),但SQL查询生成的是post_date之后的订单。代码: 查询: 选择wp_posts。*从wp_posts其中1=1和wp_posts.post_type='成员'和(wp_posts.post_status='发布'或wp_posts.post_status='关闭'或wp_posts.post_status='私人'或wp_posts
因此,我有两个表,它显示的值类似于Facebook look-a feed。它们都有一个列,名为,但我希望它们按日期desc排序。 我认为加入是正确的方式(?),但不太确定。有人能帮帮我吗? 目前我在两个不同的查询中有它们: 而且 我该怎么做呢?