Olá, alguém poderia me ajudar a resolver esse problema.
No if (email != null), descrevi o problema.
public List<PaymentData> listAll(Integer first, Integer size, String name, String email, Calendar dateBegin, Calendar dateEnd) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<PaymentData> query = cb.createQuery(PaymentData.class);
Root<PaymentData> root = query.from(PaymentData.class);
Predicate conjunction = cb.conjunction();
//colocar os filtros
if (name != null) {
conjunction = cb.and(conjunction, cb.equal(root.<String>get("nome"), name));
}
if (email != null) {
System.out.println("email : "+email);
//Account - UserSiter
//Preciso fazer uma busca pelo atributo email, só que esse esta dentro do Obj UserSiter e o mesmo esta dentro de Account e PaymentData
//A cima já pego o PaymentData, agora não sei como especificar a query, onde tenho que passar pelo Account e depois no UserSiter para chegar no email
Root<UserSiter> userSiterRoot = query.from(UserSiter.class);
conjunction = cb.and(conjunction, cb.equal(userSiterRoot.<String>get("email"), email));
}
query.select(root)
.where(conjunction)
.orderBy(cb.desc(root.<String>get("id")));
return entityManager.createQuery(query)
.setFirstResult(first)
.setMaxResults(size)
.getResultList();
}
Obrigado.