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