SubQuery com Hibernate

Pessoal,

Como faço uma Subquery com Hibernate. Preciso selecionar uma lista de Objetos nessas condições?


select * from movimento where vl_desvio_mar <> 0 and cd_ua=130 and not exists 
(select desvio.id_movimento 
from desvio 
where desvio.id_movimento=movimento.id_movimento and cd_periodo = 362) 

Movimento é um Objeto
Desvio é um Objeto

Já pesquisei e ainda não sei por onde começar!

Pesquisou Criteria?
Dê uma olhada na documentação e veja que com dois Restrictions você mata a primeira parte. Com um alais e mais uns restrictions você conclui a outra.

Aposto que tem exemplos em HQL no google…

Em relação as Restrictions.eq já estou utilizando, agora em relação a esse alias que não estou achamando alguma coisa para esse fim. A questão é que tenho que retornar um list aí num sei como fazer sem usar o critéria.

Com query, seria:

List<?> lista = query.list();//não tenho certeza

Pelo que pude compreender, existe uma relação entre movimento e desvio, com relacionamento muitos movimentos para cada desvio (pois a FK id_movimento está em desvio).
Assim sendo, você deve criar um alias

criteria.createAlias("desv", "desvio");

Isso atribuirá à query a ser construída que a propriedade desvio possui o alias desv.

Vlw drsmachado ,

Consegui fazer da seguinte forma:

			Criteria criteria = this.session.createCriteria(Movimento.class)
					.add(Restrictions.eq("cdUa.cdUa", cdUa));

			DetachedCriteria desvio = DetachedCriteria.forClass(Desvio.class)
			.setProjection(Property.forName("idMovimento"));

			criteria.add(Property.forName("idMovimento").notIn(desvio));

			return criteria.list();

Agora to com outra dúvida, tenho que adicionar um Restrictions no criteria no qual o valor de uma determinada coluna tem que ser diferente de 0 como faço isso?

criteria.add(Restrictions.not(“coluna”, 0)) = para selecionar os valores de “coluna” DIFERENTES de 0
criteria.add(Restrictions.gt(“coluna”, 0)) = para selecionar os valores de “coluna” MAIORES QUE 0
criteria.add(Restrictions.lt(“coluna”, 0)) = para selecionar os valores de “coluna” MENORES QUE 0

[quote=drsmachado]criteria.add(Restrictions.not(“coluna”, 0)) = para selecionar os valores de “coluna” DIFERENTES de 0
criteria.add(Restrictions.gt(“coluna”, 0)) = para selecionar os valores de “coluna” MAIORES QUE 0
criteria.add(Restrictions.lt(“coluna”, 0)) = para selecionar os valores de “coluna” MENORES QUE 0[/quote]

oque é lt em inglês?

lt = LESS THAN a saber:

http://www.mkyong.com/hibernate/hibernate-criteria-examples/

Na parte de Criteria API, segundo exemplo…

[quote=drsmachado]lt = LESS THAN a saber:

http://www.mkyong.com/hibernate/hibernate-criteria-examples/

Na parte de Criteria API, segundo exemplo…[/quote]

ok obrigado!

Seria interessante postar as classes … pra poder ver como você fez o mapeamento.

mas seria algo ± assim

select m from Movimento m 
    where m.desvioMax != 0 AND m.ua = 130
    AND not exists ( SELECT d from Desvio d where d.id = m.id and d.periodo = 362)