【问题标题】:Hibernate Criteria to match against all child collection与所有子集合匹配的休眠条件
【发布时间】:2012-01-19 19:19:05
【问题描述】:

我在产品和标签之间有一个休眠的多对多关系
产品类有一个“标签”集合根据多对多映射设置
我正在尝试获取与所有标签(不是任何标签)匹配的产品
以下将获取与任何标签匹配的所有产品。

Criteria crit = session.createCriteria(Product.class,"Prdct");  
   crit.createAlias("Prdct.tags","PT");  
crit.add(Restrictions.in("PT.Name",selectedTags));  
crit.list();  

如何使用标准来做到这一点?

【问题讨论】:

  • 您的意思是所有选定的标签都应该出现在产品标签中吗?或者所有产品标签都应该出现在所选标签中?或者两个集合应该包含完全相同的标签?
  • 我想这是根据大量可用标签来查找带有一小部分搜索标签中的每一个标签的产品。例如,查找标签为“cotton”和“long-sleeve”的所有衬衫,忽略标签“sale”是否存在。

标签: hibernate


【解决方案1】:

它只对集合有用

// get the count of tags matching the criteria
DetachedCriteria subquery = DetachedCriteria.For(Product.class)
    .add(Expression.eq("id","product.id"))
    .createAlias("tags","tag")  
    .add(Restrictions.in("tag.Name", selectedTags))
    .setProjection(Projections.count("PT.Name"));

// get the Products where there all tags match
Criteria crit = session.createCriteria(Product.class,"product")
    .add(Subqueries.eq(selectedTags.getCount(), subquery);

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
  • 2011-12-01
  • 2011-02-25
  • 2011-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多