我有两个实体:
Games
(让它有对象a
,b
(Tags
(让它有对象1
、2
(
和与这两个实体具有一对多关系的连接表GameTags
(Games
和Tags
(。这意味着,如果a
与1
相关联,而2
与b
与1
相关联,则表GameTags
中将有三条记录。
问题:
给定,我有一个搜索标签列表(ST
(,我想找到所有标签是ST
的子集或等于ST
的游戏。
天真的方法:
我考虑过一种天真的方法——执行所有2^n -1
SQL查询,并为所有生成的游戏找到所有标签,并与ST
进行比较,以排除不是ST
子集的游戏。但是,我相信必须有更好的方法来处理SQL中的集合。
您必须使用这样的exists子查询:
select g from Games g
where exists (
select 1
from g.tags t
where t.id in :tagIds
)