sma*_*sma 15 hibernate restrictions hibernate-criteria
除了更少的代码之外,使用Hibernate Criteria API构建IN子句的以下两种方法之间的区别是什么?是否存在性能问题?我缺少的检索中是否有一些逻辑?就返回的行而言,它们似乎都执行相同的操作.
Disjunction disj = Restrictions.disjunction();
for (String value : stringArray) {
disj.add(Restrictions.eq("code", value));
}
where.add(disj);
Run Code Online (Sandbox Code Playgroud)
VS.
Restrictions.in("code", stringArray);
Run Code Online (Sandbox Code Playgroud)
我问的原因是因为我在前者存在的情况下重构遗留代码,但我期待后者.如果它们都是相同的,我将单独保留遗留代码.
Nar*_*yan 15
Hibernate Disjunction习惯了
Group expressions together in a single disjunction
Run Code Online (Sandbox Code Playgroud)
这意味着,如果必须有条件地与值X或Y或Z进行比较,您可以迭代并应用选择性析取
理想情况下,在你的情况下Restrictions.in和Restrictions.Disjunction做同样的事情,在这种情况下我更喜欢前者.
Restrictions.Disjunction为我们提供了明确的控制,例如它允许类似运算符,而运算符则不允许.
例如:
criteria.add(Restrictions.disjunction()
.add(Restrictions.eq("bill.stateCd", null))
.add(Restrictions.eq("bill.stateCd", ""))
.add(Restrictions.ilike("bill.stateCd","%"+stateCd+"%")));
Run Code Online (Sandbox Code Playgroud)
无法实现
criteria.add(Restrictions.in("bill.stateCd", Arrays.asList(null,"", "%"+stateCd+"%")));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43517 次 |
| 最近记录: |