我有以下产品,其中包含许多颜色。
我希望找到至少含有红色和绿色的产品。
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
提前致谢。
答案 0 :(得分: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();
<强>更新强>
hibernate有一个issue就是这样。最后一条评论描述了如何使用。