public List<ItaliaInvoice> listInvoice(Integer first, Integer size, Integer nf, Integer year) {
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<ItaliaInvoice> query = cb.createQuery(ItaliaInvoice.class);
Root<ItaliaInvoice> root = query.from(ItaliaInvoice.class);
Predicate conjunction = cb.conjunction();
//colocar os filtros
if (nf != null) {
conjunction = cb.and(conjunction, cb.equal(root.<Integer>get("id"), nf));
}
if (year != null) {
conjunction = cb.and(conjunction, cb.currentDate(root.<Calendar>get("date"), year)));
//AQUI NÃO ESTOU SABENDO USAR A SINTAXE CORRETA PARA PEGAR APENAS O ANO NO CAMPO DATA
}
query.select(root)
.where(conjunction)
.orderBy(cb.desc(root.<String>get("id")));
return entityManager.createQuery(query)
.setFirstResult(first)
.setMaxResults(size)
.getResultList();
}