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