Java 一对多搜索的使用和条件

Java 一对多搜索的使用和条件,java,hibernate,hibernate-criteria,Java,Hibernate,Hibernate Criteria,我有以下产品,其中包含许多颜色 我希望找到至少含有红色和绿色的产品 Product class String id; List<Color> colors{}; Color class id color kindly ignore the syntax error. 提前感谢。我们的想法是选择所有有颜色的产品并计算每个产品的数量,然后两种颜色的产品的数量应为2 DetachedCriteria colorCrit = DetachedCr

我有以下产品,其中包含许多颜色

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

Product class

    String id;

    List<Color> colors{};

Color class

    id

    color

kindly ignore the syntax error.

提前感谢。

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


对于这一点,hibernate有一个明确的定义。最后一条评论描述了如何使用。

您的意思是,您需要所有具有红色和绿色的产品,以及相同但颜色不同的产品。(换句话说,你不需要任何没有红色和绿色字母的产品)。真的吗?是的。示例:产品绿-红-黄将被展示看起来不错,但还有其他方法吗?仅仅为了一个简单的搜索,这似乎太多的工作了=搜索函数只接受标准列表,除非绝对必要,否则我不希望更改该函数。尝试提出一个sql查询来实现这一点,我很乐意将其转换为标准。如果要在颜色中使用backreference,则可以执行“subqueries.eq(colors.count(),subQueryWhere BackReferenceEqualThisAlias”有没有办法避免这种情况下的子查询?我已经尝试了一整天,但我也无法避免使用子查询。colorCrit>>只是好奇,这是一个独立的查询,看起来是,但我只是想确认我想不出没有子查询的sql,是的,colorCrit是独立的
Product: RED GREEN - PASS
Product: RED GREEN YELLOW - PASS
Product: RED YELLOW - FAIL
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();