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();