多个Criteria之间的关联

Session session =hibernateSessionFactory.getSession();

//建立order和customer对象的多对一关系

Criteria crit1=session.createCriteria(Order.class);

Criteria crit2=crit1.createcriteria("customer");

//添加约束条件

crit1.add(Restrictions.ne("number","2008012402"));

crit2.add(Restrictions.eq("name","bea"));

crit2.addorder(org.hibernate.criterion.order.desc("name"));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在JPA中,多表关联分页需要使用JPA的Criteria API或者JPQL语句。下面是一个基于Criteria API的示例代码。 假设有两个实体类:Order和OrderItem,它们之间是一对多的关系。现在我们要查询所有订单,并且对查询结果进行分页。 ```java public Page<Order> findAllOrders(int page, int size) { CriteriaBuilder cb = entityManager.getCriteriaBuilder(); CriteriaQuery<Order> query = cb.createQuery(Order.class); Root<Order> root = query.from(Order.class); root.fetch("orderItems", JoinType.LEFT); query.select(root).distinct(true); query.orderBy(cb.desc(root.get("createTime"))); List<Order> orders = entityManager.createQuery(query) .setFirstResult((page - 1) * size) .setMaxResults(size) .getResultList(); CriteriaQuery<Long> countQuery = cb.createQuery(Long.class); countQuery.select(cb.count(countQuery.from(Order.class))); Long count = entityManager.createQuery(countQuery).getSingleResult(); return new PageImpl<>(orders, PageRequest.of(page - 1, size), count); } ``` 上面的代码中,我们首先创建了一个CriteriaBuilder实例,然后使用它创建了一个CriteriaQuery实例,并指定了查询的实体类为Order。接着,我们通过调用from方法来获取Order实体的根对象Root<Order>,并通过调用fetch方法来关联OrderItem实体。这里使用了左外连接(JoinType.LEFT)来关联OrderItem实体,这样即使某些订单没有对应的订单项,它们也会被查询出来。然后,我们设置查询结果的去重选项(distinct)并按照订单创建时间倒序排序。接着,我们使用createQuery方法创建了一个Query实例,并指定了分页参数(起始位置和最大结果数)。最后,我们使用另一个CriteriaQuery实例来查询总记录数,然后将所有查询结果封装到一个Page对象中返回。 需要注意的是,上面的代码中使用了PageImpl类来封装查询结果,它是Spring Data JPA框架提供的一个分页实现类。如果你没有使用Spring Data JPA框架,可以自己实现一个分页类,也可以使用其他第三方分页库。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值