Hibernate Restrictions.in vs. Disjunction

sma picture sma · May 5, 2011 · Viewed 47.2k times · Source

Other than less code, what is the difference between the following two approaches to building an IN clause using the Hibernate Criteria API? Are there performance concerns? Is there some logic in the retrieval I am missing? They both seem to perform the same as far as rows returned.

Disjunction disj = Restrictions.disjunction();
for (String value : stringArray) {
     disj.add(Restrictions.eq("code", value));
}
where.add(disj);

VS.

Restrictions.in("code", stringArray);

The reason I ask is because I am refactoring legacy code where the former exists, but I was expecting the latter. If they are both the same, I am going to leave the legacy code alone.

Answer

Narayan picture Narayan · May 5, 2011

Hibernate Disjunction is used to

      Group expressions together in a single disjunction

which means, if you have to compare against values X OR Y OR Z conditionally, you may iterate over and apply selective disjunction

So ideally in your case Restrictions.in and Restrictions.Disjunction does the same thing, i prefer the former in this case.