编程语言
首页 > 编程语言> > java-使用AND条件进行一对多搜索

java-使用AND条件进行一对多搜索

作者:互联网

我有以下包含多种颜色的产品.

我希望找到至少包含红色和绿色的产品.

Product class

    String id;

    List<Color> colors{};

Color class

    id

    color

kindly ignore the syntax error.

我可以使用以下内容搜索“或”条件.

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

提前致谢.

解决方法:

这个想法是我们选择所有带有颜色的产品并计算每个产品,然后两种颜色的产品的颜色数应为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();

更新:

正是为此,休眠状态为issue.最后的评论描述了如何使用.

标签:java,hibernate,hibernate-criteria
来源: https://codeday.me/bug/20191012/1900837.html