Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Working with hibernate multiple Criteria with logical AND

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.

like image 593
black sensei Avatar asked Nov 11 '09 16:11

black sensei


2 Answers

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

like image 181
Steve B. Avatar answered Nov 03 '22 00:11

Steve B.


Adding these restrictions individually creates a relation of 'AND' between them. This is good enough for what you need.

like image 31
Yuval Avatar answered Nov 02 '22 22:11

Yuval