Как объединить таблицы в r2db c? - PullRequest
1 голос
/ 10 февраля 2020

В java реактор, r2db c. У меня есть две таблицы A, B. У меня также есть определенные репозитории для них. Как я могу получить данные, составленные из соединения A B?

Я только придумываю следующий подход: вызвать databaseClient.select из A и, следовательно, в al oop вызвать select из B.

Но я хочу более эффективный и реактивный способ. Как это сделать?

1 Ответ

3 голосов
/ 10 февраля 2020

TL; DR: Использование SQL.

Spring Data DatabaseClient - улучшенный и реактивный вариант для R2DB C того, что JdbcTemplate для JDB C. Он включает в себя различные режимы выполнения, управление ресурсами и трансляцию исключений. Его беглые методы выбора / вставки / обновления / удаления API-интерфейса подходят для простых и простых запросов. Все, что выходит за рамки предоставленного API, подлежит SQL использованию.

Как говорится, метод, который вы ищете: DatabaseClient.execute(…):

DatabaseClient client = …;
client.execute("SELECT person.age, address.street FROM person INNER JOIN address ON person.address = address.id");

То же самое происходит для репозитория @Query методов.

Вызов базы данных во время обработки результатов - это хороший способ заблокировать всю обработку результатов, поскольку результаты выбираются по потоку. Выполнение запроса, когда не все результаты получены, но может исчерпать буфер предварительной выборки из 128 или 256 элементов и привести к зависанию потока результатов. Кроме того, вы создаете проблему N + 1.

...