#mysql #spring #performance #jpa #spring-data-jpa
Вопрос:
Более новые версии MySQL имеют концепцию выражения конструктора строк, которое позволяет выполнять запросы по условиям, состоящим из подмножества столбцов, соответствующих одной из заданных записей в списке кортежей; например:
SELECT * FROM t WHERE (c1, c2) IN ((1, 1), (2, 2))
возвращает все записи, которые имеют (c1 = 1 и c2 = 1) или (c1 = 2 и c2 = 2).
Мой вопрос заключается в том, может ли это быть достигнуто с помощью Spring JPA без использования собственных запросов, которые сделали бы код зависимым от поставщика БД.
В качестве фиктивного примера предположим, что у меня есть класс Foo
с целочисленными полями bar
baz
и списком Foo
s. Я хочу создать запрос Spring JPA, который выдаст все записи бд из таблицы A(c1, c2, c3)
, соответствующие одному из моих Foo
s, имеющему c1 = bar
и c2 = baz
.
Я не смог найти никаких ссылок в весенних документах.
Если (пока) нет решения этой проблемы, то мне интересно, лучше ли выполнять полный выбор, а затем фильтровать код, чем выполнять N запросов для отдельных записей, принимая во внимание, что таблица небольшая (тысячи записей).
Комментарии:
1. Это не поддерживается JPA/Hibernate. Если вы хотите использовать всю мощь SQL с Java, я рекомендую jooq.org
2. До MySQL 5.7.3 «конструкторы строк» существовали, но были очень неэффективны.