17

コードが少ないこと以外に、Hibernate Criteria API を使用して IN 句を構築する次の 2 つのアプローチの違いは何ですか? パフォーマンスに関する懸念はありますか? 欠落している検索にいくつかのロジックがありますか? 行が返される限り、どちらも同じように動作するようです。

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

対。

Restrictions.in("code", stringArray);

私が尋ねる理由は、前者が存在するレガシーコードをリファクタリングしているためですが、後者を期待していたからです。両方とも同じである場合は、レガシー コードをそのままにしておきます。

4

3 に答える 3

17

Hibernate Disjunctionは、

      Group expressions together in a single disjunction

つまり、値 X OR Y OR Zを条件付きで比較する必要がある場合は、反復して選択的論理和を適用できます。

したがって、理想的には、Restrictions.inRestrictions.Disjunctionは同じことを行います。この場合は前者を好みます。

于 2011-05-05T20:09:56.770 に答える
11

Restrictions.Disjunction は、明示的な制御を提供します。たとえば、like 演算子を許可しますが、as 演算子では許可しません。

例えば:

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+"%")));
于 2014-04-15T20:11:43.520 に答える