给定一个具有@ElementCollection字符串的类,并给出一个字符串的输入集合:
public class FooBar {
@ElementCollection
private Set<String> tags
}
Set<String> queryTags;
如何查询以下两种情况:
注意:我不会问两个集合是否相等。
显然,我可以查询所有并在代码中执行集合比较,或者我可以这样做:
for(String tag : queryTags){
createQuery("from FooBar fb where :t member of fb.tags").setString("t", tag)
}
这两种方式看起来都非常低效,但我不知道vanilla SQL或HQL是否支持对集合的任何查询支持
答案 0 :(得分:1)
select fb
from FooBar fb
left join fb.tags t
where t in ( :queryTags )
select fb
from FooBar fb
where fb.id not in (
select id
from FooBar
left join tags t
where t not in ( :queryTags )
)
queryTags的设置位置为:
session.createQuery(queryString).setParameterList( "queryTags ", queryTags ).list();