Fala @Wilian_Coelho
Para o que você precisa existem n formas de se fazer, mas as principais são: Consultas por HQL (JPQL), Consultas por Critérios (usando Criteria) e Consulta por Exemplos.
HQL - Linguagem de Consulta do Hibernate ou JPQL -> É um dialeto orientado para objetos, um sql bombado;
QBC - Query by Criteria - você monta sua consulta manipulando objetos de critérios em runtime;
QBE - Query by Example - você usa objetos populados com determinados valores e a consulta retorna todos que atendam esses valores no banco.
Veja os exemplos que montei pra você, considerando que vc já tenha a entidade Aluno com as propriedades que você mencionou.
1º Exemplo:
[CODE]
package exemplo;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
public class ConsultaPorHQL {
public static void main(String[] args) {
EntityManager em = EntityManagerUtil.getEntityManager();
em.getTransaction().begin();
List<String> filtroStatus = Arrays.asList("A", "B", "C");
StringBuilder sbQuery = new StringBuilder("from Aluno a where a.dataCriacao between :dtIni and :dtFim and a.status in (");
for (int i = 0; i < filtroStatus.size(); i++) {
sbQuery.append(":status").append(i).append(i == filtroStatus.size() - 1 ? "" : ", ");
}
sbQuery.append(")");
Query qry = em.createQuery(sbQuery.toString())
.setParameter("dtIni", Calendar.getInstance())
.setParameter("dtFim", Calendar.getInstance());
for (int i = 0; i < filtroStatus.size(); i++) {
qry.setParameter("status" + i, filtroStatus.get(i));
}
List<Aluno> alunos = qry.getResultList();
for (Aluno a : alunos) {
System.out.println("Id: " + a.getId());
}
em.close();
}
}
[/CODE]
2º Exemplo:
[CODE]
package exemplo;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
public class ConsultaPorCriterios {
public static void main(String[] args) {
EntityManager em = EntityManagerUtil.getEntityManager();
em.getTransaction().begin();
Calendar dtIni = Calendar.getInstance();
Calendar dtFim = Calendar.getInstance();
List<String> filtroStatus = Arrays.asList("A", "B", "C");
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<Aluno> criteria = builder.createQuery(Aluno.class);
Root<Aluno> root = criteria.from(Aluno.class);
criteria.select(root);
Predicate between = builder.between(root.get("dataCriacao"), dtIni, dtFim);
Predicate in = root.get("status").in(filtroStatus);
criteria.where(between, in);
List<Aluno> alunos = em.createQuery(criteria).getResultList();
for (Aluno a : alunos) {
System.out.println("Id: " + a.getId());
}
em.getTransaction().commit();
em.close();
}
}
[/CODE]
3º Exemplo:
[CODE]
package exemplo;
import java.util.Calendar;
import java.util.List;
import javax.persistence.EntityManager;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Example;
public class ConsultaPorExemplos {
public static void main(String[] args) {
EntityManager em = EntityManagerUtil.getEntityManager();
Session session = (Session) em.getDelegate();
Aluno filtroAluno = new Aluno();
filtroAluno.setDataCriacao(Calendar.getInstance());
filtroAluno.setStatus("B");
Criteria criteria = session.createCriteria(Aluno.class);
criteria.add(Example.create(filtroAluno));
List<Aluno> alunos = criteria.list();
for (Aluno a : alunos) {
System.out.println("Id: " + a.getId());
}
}
}
[/CODE]