1.5 - Связь многие ко многим и left join

Добрый день!

Умные люди, подскажите изящное решение задачи.
Есть список пользователей (Recipiеnt),
таблица с рассылками (MassMail)
и таблица связи LinkRecipiеntToMassMail.

Задача: в редакторе рассылки мне нужно вывести полный список пользователей с галкой, которая означает, что пользователь подписан на на рассылку.

Управление подпиской на рассылку должно быть на одной странице. Как-то так выглядит:

изображение

Это попытка миграции старого приложения, по этому, нужно что бы в LinkRecipiеntToMassMail появилась строка: id пользователя - id рассылки и удалить ее, если галку сняли. Те буквально или есть запись в таблице или нет, без признака ON/OFF. Запись есть - значит подписан.

Как я решил задачу: в базе я сделал редактируемую вьюху (все рассылки + все пользователи) + с тот самый left join LinkRecipiеntToMassMail. В jmix прописал ее как entity, и в целом, все устраивает. Но если мне потребуется вывести все рассылки с Подписанными на них пользователями, у меня, естественно, выводятся все пользователи включая не подписанных (left join же).

В итоге, я сделал 3 entity в jmix для каждой таблицы с связью association many to one. Теперь, для вывода рассылки+подписанные пользователи использую эту связку.

Как-то это можно реализовать попроще, к примеру, как-то подправить запрос в лоадере?

И второй вопрос: таблица вывода всех рассылок и подписанных пользователей. Такой код:

<table id="edoTypesTable" 
[...]
                    <column id="recipientsList" caption="Получатели уведомлений" width="280"/>
                    <column id="recipientsList.recipientIdLink.fullName" caption="Имя получателя" width="280"/>
                    <column id="recipientsList.recipientIdLink.eMail" caption="Адрес получателя" width="280"/>

В recipientsList - выводится имя сущности LinkRecipiеntToMassMail так же как и в recipientsList.recipientIdLink.fullName и eMail.

Как вывести поля отдельно? Запрос в лоадере править нужно, верно я понимаю?

Со вторым вопросом справился, протащив поле из “получателей” в таблицу связей через вот такую конструкцию в entity:

    @JmixProperty
    @Transient
    private String recipientEMail;
    public String getRecipientEMail() {
        return recipientLink.getEMail();
    }

Но, знаете, меня по прежнему не не покидает чувство, что люди в здравом уме и трезвой памяти тек не делают… С другой стороны, это же, вроде бы, не похоже на COMPOSITION.

Эх.