使用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存在一个问题 。 最后一条评论描述了如何使用。