hql in-clause 在子集合中有多个命中
hql in-clause with multiple hits in child collection
我有一个名为 Recipe
的 table/entity,它有一个 Tag
类型的子集合。
我希望能够通过两个或更多标签搜索食谱。类似于:
SELECT re FROM Recipe re JOIN re.tags t WHERE t in :tagsIds
但我只想要 Tag 集合包含所有 tagId 的那些命中。
HQL/SQL 有可能吗? (也许使用标准?)
提前致谢。
我假设您有两个不同的实体 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();
我相信您可能缺少 HQL 中的括号。应该是:
... WHERE t in (:tagsIds)
好的,就这样了。感谢您的回复。
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();
我有一个名为 Recipe
的 table/entity,它有一个 Tag
类型的子集合。
我希望能够通过两个或更多标签搜索食谱。类似于:
SELECT re FROM Recipe re JOIN re.tags t WHERE t in :tagsIds
但我只想要 Tag 集合包含所有 tagId 的那些命中。 HQL/SQL 有可能吗? (也许使用标准?)
提前致谢。
我假设您有两个不同的实体 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();
我相信您可能缺少 HQL 中的括号。应该是:
... WHERE t in (:tagsIds)
好的,就这样了。感谢您的回复。
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();