hql in子句,子集合中有多个匹配

时间:2016-03-28 20:24:17

标签: java hibernate hql in-clause

我有一个名为Recipe的表/实体,其子集合的类型为Tag。 我希望能够通过两个或更多标签找到食谱搜索。类似的东西:

SELECT re FROM Recipe re JOIN re.tags t WHERE t in :tagsIds

但我只想要Tag集合中包含所有tagIds的那些匹配。 是否可以在HQL / SQL中使用? (也许使用Criteria?)

提前致谢。

3 个答案:

答案 0 :(得分:0)

我假设您有两个不同的实体Recipe和Tag,可以按照以下方式完成。

    Criteria criteria = getSession().createCriteria("Recipe.class");
    criteria.createAlias("tags", "tag");
    criteria.add(Restrictions.in("tag.id", Arrays.asList(1,2,3)));
    return (List<Recipe>) criteria.list();

答案 1 :(得分:0)

我相信你可能在HQL中缺少括号。它应该是:

... WHERE t in (:tagsIds)

答案 2 :(得分:0)

好的,所以这样做了。谢谢你的回复。

String hql = "select r from Recipe r " +
                "join r.tags t " +
                "where t.id in (:tags) " +
                "group by r " +
                "having count(t)=:tag_count";
Query query = session.createQuery(hql);
query.setParameterList("tags", tagIds);
query.setInteger("tag_count", tagIds.size());
List<Recipe> recipes = query.list();

这是我找到帮助的地方:http://www.sergiy.ca/how-to-write-many-to-many-search-queries-in-mysql-and-hibernate/