Поиск в таблице по большой выборке

Обычный spring boot проект, используется hibernate.
Есть таблица, есть форма поиска по разным параметрам.
Использую спецификацию, поиск работает хорошо.
В том числе по определённой колонке (строка), пускай название будет mac.
Но часто надо делать поиск не по одному mac, а целому множеству маков. Порой достигает приличных величин - десятки тысяч.
Т.е. пользователь загружает файлик со списком маков и хочет таблицу отфильтровать.
Когда небольшое число, то IN справляется, но если большое, то и запрос становится долгим, плюс ограничение на количество элементов в IN есть.
Я вижу такой вариант - создаю временную таблицу, через COPY заполняю её из файла. А затем делаю выборку через JOIN с временной таблицей. Это будет быстро. Но это будет native запрос.
Соотвественно, я смогу сделать поиск только по макам. Но у меня отвалится поиск по остальным параметрам, а я могу захотеть фильтровать сразу по разным полям.
Плюс в таблице в html есть и пагинатор и сортировка по разным столбцам.
Её, наверно, можно было бы сделать и не native, если бы временная таблица была одна.
А так получается мы залили файл1 с какими-то маками, по ним поискали. Потом залили файл2 с другими маками, потом вернулись к поиску по первому списку.
Т.е. получается у меня таблицы будут создаваться в runtime. И я не представляю что мне писать в CriteriaQuery,criteriaBuilder, чтобы сохранить поиск через спецификации. Есть идеи?


Ответы (0 шт):