Ebean возвращает записи, если список является подмножеством другого списка - PullRequest
1 голос
/ 26 февраля 2020

Я новичок в использовании Ebean и мне нужна помощь в написании запроса. Для справки я использую Ebean 3.2 с Postgres.

. Сейчас у меня есть модель оповещения, которая определяется следующим образом:

@Entity
public class Alert extends Model {


    @Id
    public long id;


    @ManyToMany(cascade = CascadeType.PERSIST)
    @JoinTable(name = "alert_account", joinColumns = @JoinColumn(name = "alert_id"), inverseJoinColumns = @JoinColumn(name = "account_id"))
    private List<Account> accounts;

//...
}

Существует множество ко многим отношения между оповещениями и аккаунтами. Предупреждение может содержать несколько учетных записей.

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


Возьмите следующий пример :

Предупреждение № 1 имеет учетные записи [#a, #b, #c].

Предупреждение № 2 имеет учетные записи [#b, #c].

Предупреждение # 3 имеет учетные записи [#b].

Предупреждение № 4 имеет учетные записи [#a].

Мой список учетных записей: [#b, #c]

Я хочу запрос на возврат Alert # 2 и Alert # 3, так как они содержат учетные записи, которые являются исключительно подмножеством списка учетных записей [#b, #c]


Я экспериментировал со следующим, но это возвращенные оповещения, учетные записи которых совпадают с любыми учетными записями в списке подмножеств.

List<Account> accountSubset = //... 
return Alert.find.where().in("accounts", accountSubset).findList(); 

Чтобы уточнить, приведенный выше запрос имеет следующее поведение:

Возьмите следующий пример:

Предупреждение № 1 имеет учетные записи [#a, #b, #c].

Предупреждение № 2 имеет учетные записи [#b, #c].

Предупреждение № 3 имеет учетные записи [#b ].

Предупреждение № 4 получено nts [#a].

Мой список учетных записей: [#b, #c]

Уведомление № 1, Предупреждение № 2 и Предупреждение № 3 будут выбраны, так как они содержат учетные записи, которые соответствует любой из учетных записей в списке учетных записей [#b, #c].


Любая помощь очень ценится! Я бы предпочел выполнить фильтрацию на уровне доступа к данным, но я открыт для других предложений.

...