Je dois interroger un Message
qui est dans une liste fournie de Groups
et n'a pas été Deactivated
par l'utilisateur actuel. Voici quelques pseudo-code pour illustrer les propriétés et les entités:Aide avec la requête JPQL
class Message {
private int messageId;
private String messageText;
}
class Group {
private String groupId;
private int messageId;
}
class Deactivated {
private String userId;
private int messageId;
}
Voici une idée de ce que je dois interroger pour, il est le dernier et l'article que je ne sais pas comment faire (j'ai fait la composé NOT IN
expression). Filtrer les messages désactivés par userId peut entraîner plusieurs messages, comment puis-je vérifier si ce sous-ensemble de lignes ne contient pas le 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)
Note: Le ...
est là parce que je ne sais pas le nombre de groupids à l'avance. Je les reçois en tant que Collection<String>
donc je vais devoir les traverser et les ajouter dynamiquement au JPQL.
Pourriez-vous clarifier le problème (btw, vous pourriez utiliser 'AND group.groupId IN (: list)' au lieu de plusieurs 'OR')? –
Merci pour la pointe pour réduire les conditions de branchement. Le problème est '('someUserId', msg.messageId) NOT IN (unactive.userId, unactive.messageId)' est invalide - Je ne sais pas comment construire cette partie de la requête. Peut-être qu'une sous-requête est en ordre? – Lightbeard