Consulta relacionamento ManyToMany

0 respostas
V

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.

Criado 1 de julho de 2011
Respostas 0
Participantes 1