-
29-10-2019 - |
質問
少ないコード以外に、Hibernate Criteria APIを使用してIN句を構築するための次の2つのアプローチの違いは何ですか?パフォーマンスの懸念はありますか?取得に私が欠けているいくつかのロジックはありますか?どちらも、列が返された限り同じように機能しているようです。
Disjunction disj = Restrictions.disjunction();
for (String value : stringArray) {
disj.add(Restrictions.eq("code", value));
}
where.add(disj);
vs。
Restrictions.in("code", stringArray);
私が尋ねる理由は、前者が存在するレガシーコードをリファクタリングしているからですが、後者を期待していたからです。どちらも同じ場合、レガシーコードのみを残します。
他のヒント
制限は、明示的な制御を提供します。たとえば、オペレーターのようにオペレーターのように、そうでないようにオペレーターのように許可します。
例えば:
criteria.add(Restrictions.disjunction()
.add(Restrictions.eq("bill.stateCd", null))
.add(Restrictions.eq("bill.stateCd", ""))
.add(Restrictions.ilike("bill.stateCd","%"+stateCd+"%")));
で達成できません
criteria.add(Restrictions.in("bill.stateCd", Arrays.asList(null,"", "%"+stateCd+"%")));
指定されたコードでは、これら2つの動作は非常に異なって動作します stringArray
ゼロ要素があります。
ゼロ式で分離を使用すると、有効なSQLクエリが生成されます 1=1
または同等の。
Restrictions.in
値のないオペレーターにつながるが、多くの場合(おそらくSQL方言がそれを処理できるかもしれない)構文的に間違っている。
所属していません StackOverflow