CriteriaBuilder-在子类上选择子句

时间:2019-04-11 13:07:26

标签: java spring jpa criteria

我正在使用spring-boot 2.0.8和Java 8 我在我的API中使用CriteriaBuilder进行搜索请求。

我不知道如何处理新请求。我的API将搜索自他所在城市以来的客户

我的模特

public class Customer {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Size(max = 100)
    @Column(name = "name", length = 100, nullable = false)
    private String name;
    ....
}

然后:

public class Address {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Column(name = "libelle_1", nullable = false)
    private String label;

    @Size(max = 100)
    @Column(name = "ville", length = 100)
    private String city;

    @ManyToOne
    private Customer customer;
}

在我的实际课堂上,我这样做:

public Predicate toPredicate(Root<Customer> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
    List<Predicate> predicates = new ArrayList<>();

    if (!StringUtils.isEmpty(criteria.getNom())) {
        predicates.add(cb.like(cb.lower(root.get("nom")), "%" + criteria.getNom() + "%"));
    }
    if (!StringUtils.isEmpty(criteria.getPrenom())) {
        predicates.add(cb.like(cb.lower(root.get("prenom")), "%" + criteria.getPrenom() + "%"));

    ....
}

在SQL中,我会:

SELECT * from Customer m
INNER JOIN ADDRESS a ON a.customer_id = m.id
WHERE a.city like '{MyValue}'

我想在“客户”中搜索“城市”的值。因为我没有在客户模型中解决地址字段,我该如何加入?

0 个答案:

没有答案