Я должен запросить Message
, который находится в предоставленном списке Groups
и не был Deactivated
текущим пользователем. Вот некоторый псевдокод для иллюстрации свойств и сущностей:
class Message {
private int messageId;
private String messageText;
}
class Group {
private String groupId;
private int messageId;
}
class Deactivated {
private String userId;
private int messageId;
}
Вот идея о том, что мне нужно запросить, это последнее предложение AND, которое я не знаю, как сделать (я составил составное выражение NOT IN
). Фильтрация деактивированных сообщений по userId может привести к появлению нескольких messageId. Как я могу проверить, не содержит ли это подмножество строк идентификатор сообщения?
SELECT msg FROM Message msg, Group group, Deactivated unactive
WHERE
group.messageId = msg.messageId
AND (group.groupId = 'groupA' OR group.groupId = 'groupB' OR ...)
AND ('someUserId', msg.messageId) NOT IN (unactive.userId, unactive.messageId)
Примечание: ...
есть, потому что я не знаю количество идентификаторов группы раньше времени. Я получаю их как Collection<String>
, поэтому мне нужно пройти их и динамически добавить в JPQL.