HQL clasula where com List

5 respostas
D

Bom Dia Pessol,

preciso muito da ajuda de voces. Não estou conseguindo desenvolver uma hql com a clausula where contendo parametros de uma list. A ideia seria mais ou menos assim:

public TabuaComutacoes getValoresComutacao(List<TabuaBiometrica> tabuaBiometrica, int x){
		Session session = this.getSession();
		String sql = "select t  from TabuaComutacoes t join t.tabua as tabua, tabuaBiometrica as tb where tabua.tabuaBiometrica.tabuaId = idContidoNaList and x =" + x;
		Query query = session.createQuery(sql);
		return ((TabuaComutacoes) query.uniqueResult());

as classes são essas

public class TabuaComutacoes implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private int x, tabuaComutacoesId;
	private List<ValoresTabuas> tabua = new ArrayList<ValoresTabuas>();
 getters e setters...
}
public class ValoresTabuas implements Serializable{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int valorTabuaId, x;
	TabuaBiometrica tabuaBiometrica;
	List<TabuaComutacoes> comutacoes;
 getters e setters...
}
public class TabuaBiometrica implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private int tabuaId, type;
	private String nome;
	private List<ValoresTabuas> valoresTabuas;
 getters e setters...

o relacionamento entre TabuaComutaçoes e ValoresTabuas é n para n
e ValoresTabuas e TabuaBiometrica é n pra 1

preciso fazer um hql para quando a pessoa informar as TabuasBiometricas 1,2 e 3 - por exemplo - ele me retorne a TabuaComutacao correspondente

5 Respostas

R

Tá dando algum erro? Qual?

D

eu nao mandei rodar porque tenho q iterar essa list pra poder ser comparada

R

Não sei se tem outra forma de fazer, mas você poderia criar uma variável String que irá armazenar os IDs dos elementos da lista separados por vírgula. Então você itera a lista e concatena os IDs neste String separados por v’irgula.

Por fim, o seu HQL ficaria algo do tipo:

String sql = "select t from TabuaComutacoes t join t.tabua as tabua, tabuaBiometrica as tb where tabua.tabuaBiometrica.tabuaId IN ( "

  • listaID + ") “+ " and x =” + x;
T

http://www.hibernate.org/hib_docs/v3/reference/en/html/objectstate.html#objectstate-querying-executing-parameters

D

thingol é isso mesmo muito obrigado, valew pela dica, funcionou

segue o codigo abaixo para quem acompanhou e teve duvidas como eu.

public TabuaComutacoes getValoresComutacao(List<TabuaBiometrica> tabuaBiometrica, int x){
        Session session = this.getSession();
	String sql = "Select t from TabuaComutacoes t join t.tabua as tabua where tabua.tabuaBiometrica in(:tabuaBiometrica) and t.x = " + x;
		
	Query q = session.createQuery(sql);   
	q.setParameterList("tabuaBiometrica", tabuaBiometrica); 
        return ((TabuaComutacoes) q.uniqueResult()); 
}

obrigado a vocês que me ajudaram!

Criado 20 de fevereiro de 2008
Ultima resposta 20 de fev. de 2008
Respostas 5
Participantes 3