如何使用ctiteria API spring数据JPA规范定义条件上的多个Join?

下面是获取联接的代码

public static Specification<Item> findByCustomer(User user) {
    return (root,criteriaQuery,criteriaBuilder) -> {
       root.fetch(User_.address,JoinType.LEFT);
        return criteriaBuilder.equal(root.get(User_.id),1);
    };
}

上面的代码在查询下面生成

从用户us中选择us.ALL_COLUMN,adr.ALL_COLUMN左外连接us.id =上的地址adr adr.id,其中us.id = 1;

如何在左外部联接上添加多个条件。我想使用Spring Data JPA Specification生成以下查询。

从用户us中选择us.ALL_COLUMN,adr.ALL_COLUMN左外连接us.id =上的地址adr adr.id 和adr.effect_end_date = null ,其中us.id = 1

hygzp 回答:如何使用ctiteria API spring数据JPA规范定义条件上的多个Join?

test_list=['Python','Jupyter Notebook','Spyder',]
subs=['Py','Jupyter','Spy','VisualStudio']
set_sub=set(subs)
tem=[]
for elem in subs:
    for n in test_list:
        if elem not in n:
            continue
        tem.append(elem)
print(list(set(tem)),'\n\n')
set_tem=set(tem)
print(set_sub - set_tem )
list_diff=list(set_sub - set_tem)
for s in list_diff:
    test_list.append(s)
print(test_list)

我有这样的东西。这是实体:

public static Specification<A> findAbyBname(String input) {
        return new Specification<A>() {
            @Override
            public Predicate toPredicate(Root<A> root,CriteriaQuery<?> cq,CriteriaBuilder cb) {
                cq.distinct(true);
                Join<A,AB> AjoinAB = root.joinList(A_.AB_LIST,JoinType.LEFT);
                Join<AB,B> ABjoinB = AjoinAB.join(AB_.B,JoinType.LEFT);
                return cb.equal(ABjoinB.get(B_.NAME),input);
            }
        };
    }
,

下面我们可以做的是,我们应该有两个谓词,然后对这两个谓词进行测试

public static Specification<Item> findByCustomer(User user) {
        return (root,criteriaQuery,criteriaBuilder) -> {
           root.fetch(User_.address,JoinType.LEFT);
    Predicate predicateForEndDate
      = criteriaBuilder.equal(root.get(User_.end_date),null);
    Predicate predicateForUser
      = criteriaBuilder.equal(root.get(User_.id),1);

            return criteriaBuilder.and(predicateForEndDate,predicateForUser)
        };
    }
本文链接:https://www.f2er.com/2678964.html

大家都在问