So far i've been working with only a case with 2 properties with and as logical operator so i use LogicalExpression like so
Criterion eqRef = Restrictions.eq("referenceID", referenceId);
Criterion eqType = Restrictions.eq("verificationType", type);
LogicalExpression and = Restrictions.and(eqRef, eqType);
this time along its more than 2 so i'm a bit confused.say this time i've added username property i can do the normal chaining with
session.createCriteria(this.getPersistentClass())
.add(Restrictions.eq("referenceID", referenceId))
.add(Restrictions.eq("verificationType", type))
.add(Restrictions.eq("username", username))
.list();
but now i don't know which kind of logical operator used between them.i'm also tempted to do this:
Criterion eqRef = Restrictions.eq("referenceID", referenceId);
Criterion eqType = Restrictions.eq("verificationType", type);
Criterion equsername = Restrictions.eq("username", username);
LogicalExpression and = Restrictions.and(eqRef, eqType);
LogicalExpression secondand = Restrictions.and(and, equsername);
i've see the eqAll too but i've never used it before.So do you have any idea about that?How do you do it, and thanks for reading this.
Since you're "AND"-ing all of your restrictions the grouping is irrelevant, so you can just continue on as in your second example, as there's nothing to be gained by subgrouping them, e.g.
.add(Restrictions.eq("referenceID", referenceId)).add(Restrictions.eq("verificationType", type)).add(Restrictions.eq("username", username))...
You do run into this problem where you need to group mixed "AND" and "OR" queries, if you want to group multiple "OR" values you can also add Criteria to a Disjunction
Adding these restrictions individually creates a relation of 'AND' between them. This is good enough for what you need.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With