1

多くの色を含む次の製品があります。

少なくとも RED と GREEN を含む製品を見つけたいです。

Product class

    String id;

    List<Color> colors{};

Color class

    id

    color

kindly ignore the syntax error.

以下を使用してOR条件を検索できます。

Criteria criteria = createCriteria();
criteria.createAlias("colors","colors");

List<String> colorsList = new LinkedList();
colorsList.add("GREEN");
colorsList.add("RED");
criteria.add(Restriction.in("colors.color",colorsList);

上記は、色に赤または緑を含む製品を提供しますが、少なくとも赤と緑を含む製品は提供しません。

Product: RED GREEN - PASS
Product: RED GREEN YELLOW - PASS
Product: RED YELLOW - FAIL

前もって感謝します。

4

1 に答える 1

2

アイデアは、色を持つすべての製品を選択し、各製品をカウントすることです。次に、両方の色を持つ製品は、色の数として 2 のカウントを持つ必要があります。

DetachedCriteria colorCrit = DetachedCriteria.For(Product.class)
    .createAlias("colors","color")
    .add(Restriction.eq("color.color", "RED")
    .add(Restriction.eq("color.color", "GREEN")
    .SetProjection(Projections.Group("id"))
    .add(Restriction.eq(Projections.rowCount(), 2));

Criteria criteria = createCriteria()
    .add(Subqueries.in("id", colorCrit)
    .list();

アップデート:

まさにこれのための休止状態の問題があります。最後のコメントは使用方法を説明しています。

于 2012-07-10T10:39:17.660 に答える