Pessoal estou querendo consultar uma tabela de relacionamento para realizar uma filtragem em meus dados retornados o problema é que não sei como realizar essa
consultar nem via hql nem por meio de criteria. A idéia é a seguinte quero retorna todas as provas que estão dentro desse intervalo de datas passado, que tenham status
ativo e possuam tal instituição e que estejam aplicadas a um determina turma. A minha consulta até então vêm retornando todas as provas que têm status ativo são de uma
determina instituição e estão em um determinado intervalo de datas mas com a inclusão da turma eu não venho conseguido acredito ser erro de como acessar essa propriedade
já que o relcionamento é manyTOmany não sei se expliquei bem mas acho q é isso. vou colocar me mapeamento e a consulta como está.
@Entity
@Table(name = "turma")
public class Turma {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "turma_prova", joinColumns = { @JoinColumn(name = "idTurma") },
inverseJoinColumns = { @JoinColumn(name = "idProva") })
private Collection<Prova> listaProvas;
}
@Entity
@Table(name = "prova")
public class Prova {
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "turma_prova", joinColumns = { @JoinColumn(name = "idProva") },
inverseJoinColumns = { @JoinColumn(name = "idTurma")})
private Collection<Turma> listaTurmas;
}
public Collection<Prova> listarProvas(Date dateInicio, Date dateFim, String nomeTurma ,String instituicao) {
ArrayList<Prova>lista= new ArrayList<Prova>();
boolean status=true;
session = CreateSessionFactory.openSession();
String hql="from Prova p where(:dateInicio between p.dataInicio and p.dataFim or :dateFim between p.dataInicio and p.dataFim)" +
" and p.status=:status and p.instituicao.identificador=:instituicao";
lista=(ArrayList<Prova>) session.createQuery(hql).setDate("dateInicio", dateInicio).setDate("dateFim", dateFim)
.setParameter("status", status).setParameter("instituicao", instituicao).list();
return lista;
}
Como acessar o nome da turma a partir do relacionamento entre turma e prova para filtrar pelo nome.