java - 如何使用ctiteria API spring data JPA规范定义多个Join on条件?

标签 java jpa spring-data-jpa specifications criteria-api

下面是获取连接的代码

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);
    };
}

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

select us.ALL_COLUMN, adr.ALL_COLUMN from User us left outer join Address adr on us.id= adr.id where us.id = 1;

如何在左外连接上添加多个条件。我想使用 spring data jpa 规范生成以下查询。

Select us.ALL_COLUMN, adr.ALL_COLUMN from User us left outer join Address adr on us.id= adr.id and adr.effect_end_date = null where us.id = 1

最佳答案

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);
            }
        };
    }

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

@Entity
public class A {
    @Id
    private Long id;
    private String name;
    @OneToMany(mappedBy = "a")
    private List<AB> abList;
}
@Entity
public class B {
    @Id
    private Long id;
    private String name;
    @OneToMany(mappedBy = "b")
    private List<AB> abList;
}
@Entity
public class AB {
    @Id
    private Long id;
    private String name;
    @ManyToOne
    @JoinColumn(name = "a_id")
    private A a;
    @ManyToOne
    @JoinColumn(name = "b_id")
    private B b;
}

关于java - 如何使用ctiteria API spring data JPA规范定义多个Join on条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60000701/

相关文章:

java - 在 android 中使用 commons-lang NameValuePair

java - 以编程方式发现网络

java - JPA 惰性列表上的流

mysql - JPA - 使用条件 JsonManagedReference 进行查询

java - 让 Thymeleaf 读取对象模型数组

java - 在 jar 中调用一个 exe 文件

java - 从 ArrayList 中删除元素

java - Spring Data REST 和 IdClass - 不兼容?

java - JPA OneToMany 集合的条件

java - Spock - 模拟存储库方法 save() 给出 NullPointerException