Dúvida com Restrictions.or()

5 respostas
R

Pessoal,

Como transformar essa query sql em critéria:

select * 
from acerto 
inner join desvio on acerto.id_desvio = desvio.id_desvio 
inner join periodo on desvio.cd_periodo = periodo.cd_periodo
where 
desvio.cd_periodo = 374 anddesvio.cd_ua in (select cd_ua from usuarioua where cd_usuario = 23)
OR(
desvio.cd_periodo = 374 and acerto.cd_ua in (select cd_ua from usuarioua where cd_usuario = 23))

Já tentei usar o DetachedCriteria para as duas clausulas where e depois tentei usuar o criteria.add(Restrictions.or(criterionDesvioPeriodoAcerto, criteria2)); mas eu não consigo em um criterio dizer que:

desvio.cd_periodo = 374 and desvio.cd_ua in (select cd_ua from usuarioua where cd_usuario = 23)

e no outro dizer que:

desvio.cd_periodo = 374 and acerto.cd_ua in (select cd_ua from usuarioua where cd_usuario = 23))

Alguém poderia ajudar?

5 Respostas

fnandos

Tente usar Conjunction tipo

DetachedCriteria productCriteria = DetachedCriteria
    .forClass(Product.class)
    .createAlias("productMetaData", "pmd");
Conjunction conjunction = Restrictions.conjunction();
conjunction.add(Restrictions.eq("pmd.metaData", metaData1));
conjunction.add(Restrictions.eq("pmd.metaData", metaData2));
productCriteria.add(conjunction);

só um exemplo mas vê se ajuda.

R

Visualmente não consegui entender, vou continuar usuando Restrictions.or porém no lugar de Criterion vou utilizar Conjunction ?

R

Visualmente não consegui entender, vou continuar usuando Restrictions.or porém no lugar de Criterion vou utilizar Conjunction ?

fnandos

Desculpa, não é Conjuction é Disjunction para or, Conjuntion é equivalente a and. Você vai criar um Disjunction e passar suas Restrictions dentro dele com add.

Disjunction dis = Restrictions.disjunction();  
dis.add(Restrictions.eq("pmd.metaData", metaData1));

depois você adiciona a Disjunction com add

productCriteria.add(dis);
R

O problema é o seguinte, só posso fazer o DetachedCriteria por Classe, e a segunda clausula where relaciona ao Período do Desvio que pertence ao Acertoe o o atributo UA que pertecente ao acerto.
O 1º Criteriion estou conseguiondo fazer corretamento pois os restriction são da mesma classe, já o segundo Critenrion não consigo fazer pois cada restriction pertence a um relacionamento diferente.

Ou seja:

1º cd_periodo e ua que pertence ao Desvio que pertece ao Desvio.

2º cd_periodo que peretnce ao Desvio e ua que pertence ao Acerto.(Essa eu não consigo fazer!)

Criado 15 de março de 2012
Ultima resposta 15 de mar. de 2012
Respostas 5
Participantes 2