子查询

qq_u65ry4n3 Spring Data JPA... 最后由 qq_u65ry4n3 于2017年04月10日回复

  • 3 回答
  • 1.1k 浏览

@Override

      public Predicate toPredicate(Root<Order> root, CriteriaQuery<?> query, CriteriaBuilder cb) {

        //子查询

        Subquery<OrderDetail> subquery = query.subquery(OrderDetail.class);

        Root<OrderDetail> orderDetail = subquery.from(OrderDetail.class);  

        subquery.select(orderDetail);

        

        List<Predicate> subList = new ArrayList<Predicate>();

        subList.add(cb.equal(orderDetail, root));

        subList.add(cb.equal(orderDetail.get("isRenewal").as(Integer.class), searchVo.getIsRenewal()));

        subquery.where(subList.toArray(new Predicate[]{}));

        

        List<Predicate> list = Lists.newArrayList();

。。。。。。

list.add(cb.exists(subquery));

        

        log.info("beginDate: {}, endDate: {}, orderNumber: {}, nickName: {}, ", beginDate, endDate, orderNumber, nickName);

        

        Predicate[] predicate = new Predicate[list.size()];

        return cb.and(list.toArray(predicate));

      }

    }, pageFormVo);

在这一段代码中,我需要实现如下sql:select o.* from A o where exists (select 1 from B od where o.id = od.order_id and od.is_renewal = '1'); 但是实际输出的是:select o.* from A o where exists (select 1 from B od where  od.is_renewal = '1');

问题:怎么才能实现实际的sql

  • qq_u65ry4n3 2017年04月10日 回答 #2楼
  • 是在Order和orderDetail中表明对应关系吗?

    @OneToMany(mappedBy="order", fetch = FetchType.LAZY)

      private List<OrderDetail> details;                      //订单明细

    @ManyToOne(fetch = FetchType.LAZY)

        @JoinColumn(foreignKey = @ForeignKey(name = "none"))

        private Order order;

    上面是我写的,但是输出的sql还是不正确,不知道是不是哪里还有问题

  • 0 评论
  • qq_u65ry4n3 2017年04月10日 回答 #3楼
  • #1楼  @上海小胖  是在Order和orderDetail中表明对应关系吗?@OneToMany(mappedBy="order", fetch = FetchType.LAZY)  private List<OrderDetail> details;                      //订单明细@ManyToOne(fetch = FetchType.LAZY)    @JoinColumn(foreignKey = @ForeignKey(name = "none"))    private Order order;上面是我写的,但是输出的sql还是不正确,不知道是不是哪里还有问题

  • 0 评论