HQL clasula where com List

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

Tá dando algum erro? Qual?

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

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;

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

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!