Le schéma possède deux tables, une représentant les livres, l'autre les étiquettes définissant ces livres.
Le livre 1 a les étiquettes {A,B,C}
Le livre 2 a les étiquettes {A}
Il s'agit d'une relation m-n entre la table livre et la table étiquette.
J'aimerais sélectionner tous les livres correspondant à un ensemble d'étiquettes donné, p.ex {A,B} -> livre 1
J'ai dans un premier temps utilisé la fonction IN, mais le problème est que dès que le livre possède une des étiquettes demandée, celui-ci est retourné.
Ici, les deux livres seraient retournés.
Je voulais utiliser MINUS, afin de soustraire l'ensemble des étiquettes du livre à l'ensemble sélectionné, et si cet ensemble était vide je sélectionnais le livre, malheureusement MINUS n'est pas reconnu en HQL.
{A,B} MINUS {A,B,C} -> empty (livre 1 sélectionné)
{A,B} MINUS {A} -> {B} (livre 2 non sélectionné)
Quelqu'un aurait-il une idée afin de résoudre ce genre de problème ?
Merci d'avance.
J'ai essayé des solutions utilisant "all elements()". Mais j'obtiens systématiquement des erreurs de syntaxe à l'exécution du script.
Je me rends bien compte que ce ne peut être aussi simple, et que les différents exemples trouvés dans la documentation HQL ne traitent jamais du cas où l'on est en présence de deux ensemble à comparer. Mais plutôt un attribut à comparer à l'attribut des éléments d'un ensemble comme ici :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 select book from Book as book left join book.tags as tags where tags = all elements(:selectionTags)
Donc ca ne correspond pas vraiment à mon cas malheureusement...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 from Player p where 3 > all elements(p.scores)
Partager