2012-01-19 5 views
1

У меня есть спящий режим многие ко многим отношений между продуктом и Tag
класса Продукт имеет КОЛЛЕКЦИЯ «теги» Установить в соответствии с многие ко многим картографирования
Я пытаюсь принести продукты, которые соответствует всем тегам (а не тегам)
следующее выберет все продукты, соответствующие любому тегу.Hibernate Критерии для сопоставления всей коллекции детской

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

как это сделать используя критерии?

+0

ли вы имеете в виду, что все выбранные метки должны присутствовать в тегах продукции? Или что все теги продукта должны присутствовать в выбранных тегах? Или что оба набора должны содержать точно те же теги? –

ответ

0

его полезным только для наборов

// 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); 
Смежные вопросы