除了更少的代码外,以下两种使用Hibernate Criteria API构建IN子句的方法有何区别?是否存在性能问题?我缺少检索中的某些逻辑吗?就返回的行而言,它们似乎都执行相同的操作。

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


VS。

Restrictions.in("code", stringArray);


我问的原因是因为我正在重构存在前者的旧代码,但是我期望后者。如果它们都相同,那么我将不讲遗留代码。

最佳答案

休眠Disjunction用于

      Group expressions together in a single disjunction


这意味着,如果您必须有条件地与值X或Y或Z进行比较,
您可以遍历并应用selective disjunction

因此,理想情况下,在您的情况下,Restrictions.inRestrictions.Disjunction做同样的事情,在这种情况下,我更喜欢前者。

08-04 03:20