1

Restrictions.in("propName", ...)HibernateCriteriaオブジェクトのオペレーターがどのように機能するかをまだ理解しようとしています。

IceCreamnull 可能なプロパティを持つエンティティがあり、フレーバーが、またはflavourに等しいすべてのアイスクリームを取得したいとします。"chocolate""banana"null

Hibernate基準を使用してこれを行う正しい方法は何ですか?

私はこれを試しましたが、結果リストにアイスクリームフレーバーがnullの行は含まれていません:

String[] allowedFlavours = { "chocolate", "banana", null };
Criteria criteria = getSession().createCriteria(IceCream.class);
criteria.add(Restrictions.in("flavour", allowedFlavours));
return criteria.list();

代わりに、「またはフレーバーがnull」と言うためだけに、まったく新しい基準を追加する必要がありますか? これはあまり効率的ではないようです。

4

2 に答える 2

1

この方法を試してください

1>

 Criteria criteria = getSession().createCriteria(IceCream.class);
    criteria .add(Restrictions.disjunction().add(Restrictions.eq("flavour", "chocolate")).add(Restrictions.eq("flavour", "banana")).add(Restrictions.isNull("flavour")));

2>

String[] allowedFlavours = { "chocolate", "banana"};
Criteria criteria = getSession().createCriteria(IceCream.class);
criteria.add(Restrictions.disjunction().add(Restrictions.in("flavour", allowedFlavours)).add(Restrictions.isNull("flavour"));


return criteria.list();
于 2013-02-19T04:48:12.177 に答える
0

以下のコードを使用して試すことができますdisjunction()

disjunction : 単一の論理和で式をグループ化します (A または B または C...)

Criteria criteria = getSession().createCriteria(IceCream.class);
    criteria.add(Restrictions.disjunction()
    .add( Restrictions.isNull("flavour") )
    .add(Restrictions.in("flavour", new String[] { "chocolate", "banana" } ) );

手動で入力したので、括弧を追加/削除し、コードを適切にフォーマットしてください。

于 2013-02-19T09:00:19.023 に答える