微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用criteriaBuilder和predicates查询嵌套对象

如何解决如何使用criteriaBuilder和predicates查询嵌套对象

我正在使用 spring-boot 框架做一份工作。我有三张桌子:

支付交易
订购
订单项

这些类定义了 3 个表,如下所示:

@Entity
@Table(name = "payment_transaction")
@EqualsAndHashCode(callSuper = true)
@Data
public class PaymentTransaction extends BaseEntity {

    /**
     *
     */
    private static final long serialVersionUID = 6551819616644943167L;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "order_id")
    private Order order;

    @Column(name = "amount")
    private BigDecimal amount;

@Entity
@Table(name = "`order`")
@EqualsAndHashCode(callSuper = true)
@Getter
@Setter
public class Order extends BaseEntity {

    /**
     *
     */
    public static final long serialVersionUID = 1280823802207154940L;

    @Column(name = "status")
    @Enumerated(value = EnumType.STRING)
    public OrderStatus status;

    @JsonManagedReference
    @OnetoMany(mappedBy = "order")
    public List<OrderItem> orderItems;
@Entity
@Table(name = "order_item")
@EqualsAndHashCode(callSuper = true)
@Getter
@Setter
public class OrderItem extends BaseEntity {

    /**
     *
     */
    public static final long serialVersionUID = 8153719163599603427L;

    @JsonBackReference
    @ManyToOne
    @JoinColumn(name = "order_id")
    public Order order;

    @Column(name = "status")
    @Enumerated(value = EnumType.STRING)
    public OrderStatus status;

我需要用代码查询这些 PaymentTransation 是 OrderItem === "COMPLETED" 的属性值,通过重写方法public Predicate toPredicate(Root<PaymentTransaction> root,CriteriaQuery<?> query,CriteriaBuilder criteriaBuilder){};
我的问题是 OrderItem 嵌套在 Order 中,Order 嵌套在 PaymentTransaction 中,Order 包含一个 OrderItem 列表。这些查询对我来说太难了。
在被覆盖的方法中,我看到许多简单的查询,例如:


if (sellerId != null) {
  Predicate preSeller = criteriaBuilder.equal(root.get("sellerId"),sellerId);
  predicates.add(criteriaBuilder.and(preSeller));
}

if (buyerId != null) {
  Predicate preBuyer = criteriaBuilder.equal(root.get("buyerId"),buyerId);
  predicates.add(criteriaBuilder.and(preBuyer));
}
  

谁能帮我解决这个问题????

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。