Значения коллекции CriteriaBuilder - PullRequest
1 голос
/ 03 мая 2019

У меня есть сценарий, в котором я должен получить список всех мастеров, у которых нет учеников (набор пуст), а также учеников, чей статус отменен

@Entity    
@Table(name="Masters")   
public class Master {    

    @Id    
    private String id;

    @One To Many mapping here
    private Set<Student> students = new HashSet<>();
}

@Entity   
@Table(name="Students")   
public class Student {

    @Id
    private String id;

    @Column(name = "Status")
    private String status;
}

I have my code as 

final CriteriaBuilder cb = getEM().getCriteriaBuilder();    
final CriteriaQuery<Tuple> criteriaQuery = cb.createTupleQuery();    
final Root<Master> mvRoot = criteriaQuery.from(Master.class);
Predicate predicate = cb.conjunction();    
this gives me list of masters who dont have any students

predicate = cb.and(predicate, cb.isEmpty(mvRoot.join(Master.STUDENTS)));     

Это список магистров с отмененным статусом студента

final Join<Master, Set<Student>> studentJoin = mvRoot.join(Master.STUDENTS);    
predicate = cb.and(predicate, cb.equal(studentJoin.get(Student.status), "Cancelled"));    

Я не могу получить оба одновременно, и если я бью обоих, я просто получаю статус магистра со статусом отмененного студента, а не мастера без учеников

Может кто-нибудь, пожалуйста, сообщите мне.

...