【问题标题】:Spring JPA Criteria API Query on OneToMany List Field单对多列表字段上的 Spring JPA 标准 API 查询
【发布时间】:2021-12-28 04:47:21
【问题描述】:

我想使用 JPA/Hibernate Criteria API 加载特定客户的所有 CustomerRequest。

具体来说:我想加载所有存在具有特定 customerId 的 CustomerRequest2Customer 条目的 CustomerRequest。

@Entity
public class CustomerRequest {
    @Id
    private int id;
    private int priority;
    @OneToMany(mappedBy = "customerRequestId")
    private List<CustomerRequest2Customer> listCustomerRequestToCustomer; //  <- Query this field         
}

@Entity
public class CustomerRequest2Customer {
    @Id
    private int id;
    @ManyToOne
    private Customer customer; //  <- Query this field
    @ManyToOne
    private CustomerRequest customerRequest;
}

@Entity
public class Customer {
    @Id
    private int id; //  <- Query this field
    private String name;
}

我目前如何查询其他字段:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<CustomerRequest> cq = 
cb.createQuery(CustomerRequest.class);
Root<CustomerRequest> root = cq.from(CustomerRequest.class);
cq.where(cb.equal(root.get("priority"), 1));
return entityManager.createQuery(cq).getResultList();

【问题讨论】:

  • 到目前为止你尝试过什么?您的查询看起来如何?
  • @SimonMartinelli 我添加了我的查询当前的样子,但我尝试了很多,我真的不知道。

标签: java spring hibernate jpa criteria-api


【解决方案1】:

你必须像这样加入实体:

CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<CustomerRequest> cq = cb.createQuery(CustomerRequest.class);

Root<CustomerRequest> root = cq.from(CustomerRequest.class);
Join<CustomerRequest, CustomerRequest2Customer> customerRequest2Customer = root.join("listCustomerRequestToCustomer");
Join<CustomerRequest2Customer, Customer> customer = customerRequest2Customer .join("customer");

cq.where(cb.equal(customer .get("id"), 1));

return entityManager.createQuery(cq).getResultList();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-12
    • 2012-12-06
    • 2011-05-27
    • 2018-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-31
    相关资源
    最近更新 更多