Hibernate 或 SQL 查询集合的 M-N 成员?

Hibernate or SQL Query M-N member of with collections?

给定一个 class,它有一个字符串的 @ElementCollection,并给定一个字符串的输入集合:

public class FooBar {
   @ElementCollection
   private Set<String> tags
}

Set<String> queryTags;

如何查询以下两种场景:

  1. 返回所有 FooBar fb,其中 queryTags 在 fb.tags
  2. 中至少有一个匹配项
  3. 返回所有 FooBar fb,其中 queryTag 中的所有字符串都匹配 fb.tags 中的元素(queryTag 是 fb.tags 的子集合)

注意:我不是在问两个集合是否相等。

显然,我可以在代码中查询所有并执行集合比较,或者我可以这样做:

for(String tag : queryTags){
   createQuery("from FooBar fb where :t member of fb.tags").setString("t", tag)
}

这两种方式看起来都非常低效,但我不知道 vanilla SQL 或 HQL 是否支持对集合的任何查询支持

  1. select fb 
    from FooBar fb 
    left join fb.tags t
    where t in ( :queryTags )
    
  2. 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();