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

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

我希望找到至少含有RED和GREEN的产品。

Product class String id; List colors{}; Color class id color kindly ignore the syntax error. 

我可以使用以下内容来搜索OR条件。

 Criteria criteria = createCriteria(); criteria.createAlias("colors","colors"); List 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(); 

更新:

对于这种情况,hibernate存在一个问题 。 最后一条评论描述了如何使用。