[RESOLVIDO]Hibernate: Dúvida Criteria

3 respostas
P

Fala feras :smiley:

Preciso criar uma query parecida com o seguinte:

Select * from tabela where campo1 = x ou campo2 = x ou campo3 = x;

Alguém sabe como q eu posso fazer isso com criteria?

@SuppressWarnings("unchecked")
	public Collection<AssociacaoTO> buscarAssociacaoPorUsuario(Long id) {
		Collection<AssociacaoTO> resultado;
		session = InitSessionFactory.getInstance().getCurrentSession();
		session.beginTransaction();
		Criteria criteria = session.createCriteria(AssociacaoTO.class);
		criteria.add(Expression.eq("idUsuarioCadastro", id));
		//criteria.add(Expression.eq("ID_USUARIO_SUPERVISOR", id));
		//criteria.add(Expression.eq("ID_USUARIO_OPERADOR", id));
		resultado = criteria.list();
		return resultado;
	}

3 Respostas

ignacio83
Criteria criteria = session.createCriteria(AssociacaoTO.class);   
    criteria.add(Expression.or ( Expression.eq("ID_USUARIO_SUPERVISOR", id), Expression.eq("ID_USUARIO_OPERADOR", id) );

Se tiver mais de duas condições é melhor fazer com Expression.in()

http://www.hibernate.org/hib_docs/v3/api/org/hibernate/criterion/Expression.html

P

Cara, ta bloqueado o site do hibernate aqui ><

Tem como vc me mandar um exemplo desse .in? Pq o que eu conheço de IN, é vc passar vários paramâtros para uma única coluna.

Acho que minha dúvida não ficou clara…eu não quero uma clausula IN no meu SQL. Eu simplesmente quero conseguir colocar 3 OR na mesma query:

SELECT * FROM ASSOCIACAO WHERE ID_USUARIO_SUPERVISOR = 10 or ID_USUARIO_OPERADOR = 10 or ID_USUARIO_CADASTRO = 10

Com o IN, não vou conseguir fazer isso, pq seria como eu fizesse:

SELECT * FROM ASSOCIACAO WHERE ID_USUARIO_SUPERVISOR IN (10, 15, 20)

Consegui resolver da seguinte maneira:

Query query = session.createQuery("from AssociacaoTO where idUsuarioCadastro = :idUsuarioCadastro or idUsuarioSupervisor = :idUsuarioSupervisor or idUsuarioOperador = :idUsuarioOperador");
		query.setString("idUsuarioCadastro", String.valueOf(id));
		query.setString("idUsuarioSupervisor", String.valueOf(id));
		query.setString("idUsuarioOperador", String.valueOf(id));
ignacio83

vc vai ter que colocar outro or então:

Criteria criteria = session.createCriteria(AssociacaoTO.class);     
criteria.add(Expression.or( Expression.or ( Expression.eq("ID_USUARIO_SUPERVISOR", id), Expression.eq("ID_USUARIO_OPERADOR", id), )  Expression.eq("ID_USUARIO_XXXX", id) );
Criado 16 de abril de 2009
Ultima resposta 17 de abr. de 2009
Respostas 3
Participantes 2