#java #sql #database #hibernate #jpa
#java #sql #База данных #гибернация #jpa
Вопрос:
У меня есть две сущности:
Games
(пусть у него есть объектыa
,b
)Tags
(пусть у него есть объекты1
,2
)
и таблица соединений GameTags
, которая имеет отношение «один ко многим» с обеими сущностями ( Games
amp; Tags
). Это означает, что если a
связано с 1
и 2
и b
связано с 1
, то в таблице будет три записи GameTags
.
Проблема:
Учитывая, что у меня есть список тегов поиска ( ST
), я хочу найти все игры, теги которых являются подмножеством ST
или равны ST
.
Наивный подход:
Наивный подход, который я рассмотрел, — выполнить все 2^n -1
SQL-запросы и для всех результирующих игр найти все теги и сравнить с ST
, чтобы исключить игры, которые не являются подмножеством ST
. Однако я считаю, что должен быть лучший способ обработки наборов в SQL.
Ответ №1:
Вы должны использовать подзапрос exists, подобный этому:
select g from Games g
where exists (
select 1
from g.tags t
where t.id in :tagIds
)