0

Is it possible to use disjunction on criteria Example?

I've tried to use Example to filter some data.

    Criteria critFatura = ((Session)em.getDelegate()).createCriteria(Fatura.class);
    critFatura.add(Example.create(fatura).enableLike(MatchMode.ANYWHERE));

    critFatura.setFetchMode("tipoPublicidade", FetchMode.JOIN);
    critFatura.createCriteria("situacao")
            .add(Example.create(fatura.getSituacao()));

    critFatura.createCriteria("aprovacaoProducao", "aprovacaoProducao", JoinType.LEFT_OUTER_JOIN)
            .createCriteria("aprovacaoProducao.agencia", "agencia", JoinType.LEFT_OUTER_JOIN)
            .add(Example.create(agencia));

    critFatura.createCriteria("pedidoInsercao", "pedidoInsercao", JoinType.LEFT_OUTER_JOIN)
            .createAlias("pedidoInsercao.planoMidia", "planoMidia", JoinType.LEFT_OUTER_JOIN)
            .createAlias("planoMidia.doac", "doac", JoinType.LEFT_OUTER_JOIN);

    critFatura.createCriteria("memorando", "memorando", JoinType.LEFT_OUTER_JOIN);

    Criteria mCampanha=critFatura.createCriteria("memorando.campanha", "campanha2", JoinType.LEFT_OUTER_JOIN)
            .add(Example.create(campanha));
    Criteria dCampanha= critFatura.createCriteria("doac.campanha", "campanha", JoinType.LEFT_OUTER_JOIN)
            .add(Example.create(campanha));

I wish that the properties "memorando.campanha" and "doac.campanha" are between an or condition.

But the Example always put them on an And condition.

How can I put the two Examples on a disjuntion?

gravatasufoca
  • 37
  • 1
  • 8

1 Answers1

0

criteria.add(Restrictions.or(criterion1, criterion2))

where criterion1= Restrictions.eq(memorando.campanha, "campanha2");

Payal Bansal
  • 725
  • 5
  • 17