Мне действительно не приходилось много думать о правильном объединении, но я полагаю, что мне не удалось почти 20 лет писать SQL-запросы, найти обоснованное обоснование для его использования. Я, конечно, видел много их, я думаю, из-за того, что разработчики использовали встроенные построители запросов.
Всякий раз, когда я сталкивался с ним, я переписал запрос, чтобы его устранить. Я обнаружил, что они требуют слишком много дополнительной умственной энергии для изучения или повторного изучения, если вы не посетили запрос в течение некоторого времени, и это не было редкостью в том, что цель запроса потерялась или вернуть неверные результаты - и обычно эта некорректность привела к тому, что я спросил, почему запросы не работают.
Подумав об этом, как только вы введете правое соединение, у вас теперь есть то, что я считаю конкурирующими ветвями логики, которые должны встречаться посередине. Если будут введены дополнительные требования / условия, обе эти ветви могут быть дополнительно расширены, и теперь у вас есть больше сложностей, связанных с жонглированием, чтобы одна ветка не приводила к неправильным результатам.
Далее , как только вы введете правильное соединение, другие менее опытные разработчики, которые работают над запросом позже, могут просто подключить дополнительные таблицы к правой части запроса и тем самым расширить конкурирующие логические потоки, которые все еще должны встречаться в средний; или в некоторых случаях, которые я видел, начинают вложенные представления, потому что они не хотят касаться исходной логики, возможно, частично, потому что они могут не понимать запрос или бизнес-правила, которые были на месте, которые приводили логику.
Измените:
@RequestParam Map<String, String> attributeMap
на
@RequestBody List<Map<String, String>> attributeMap
Ваша JSON
полезная нагрузка представляет собой массив объектов.