EJB-QL : Clause where in dynamique [résolu] - Java - Programmation
Marsh Posté le 27-11-2004 à 19:32:01
A ma connaissance tu ne peux pas. Par contre, tu peux overrider ta query EJB-QL par un truc proprio.
JBoss par exemple te permet de passer certaines limitations d'EJB-QL. Quand au fait que la clause IN est dynamique, j'ai un doute ...
C'est quoi ton application server?
Marsh Posté le 28-11-2004 à 13:43:30
darklord a écrit : |
BEA Weblogic 6.1 :-/
"overrider ta query EJB-QL par un truc proprio" -> tu penses à quoi ? C'est application-server specific ?
J'ai bien sûr cherché avant de poser la question ici, mais j'ai rien trouvé. J'ai aussi un sérieux doute, mais bon, comme c'est finalement un cas tout à fait commun (filtrer sur plusieurs critères possibles), je trouve que c'est un peu laid de devoir passer par un "override".
La tentation d'exécuter le query EJB "complet" sans la clause WHERE IN, puis de filtrer la collection retournée est grande. C'est élégant, mais ça cache une complexité ayant un impact très négatif sur les perfs.
Marsh Posté le 29-11-2004 à 19:16:16
Oui, c'est application-server specific.
Weblogic 6.1, laisse tomber
Marsh Posté le 29-11-2004 à 19:28:23
darklord a écrit : Weblogic 6.1, laisse tomber |
Parce que tu crois que j'ai le choix
Marsh Posté le 29-11-2004 à 21:40:23
nan, le 'in' c'est intrinsèquemen statique.
on peut avoir un peu plus de contexte ?
et non ?1 n'est pas remplacé par la chaine de caractères, sûrement pas, jamais, plutôt mourrir. C'est un vrai binding abstrait.
edit : bingo
cmp_path_expression [NOT] IN ({literal|input_parameter}[, {literal|input_parameter]*)
ça veut dire que le cardinal est fixé à la compilation (du SQL , donc).
Marsh Posté le 27-11-2004 à 11:42:59
Salut tout le monde,
Est-il possible, en utilisant EJB-QL 2.0, de construire une clause WHERE IN (...) de manière dynamique ?
Je souhaiterais filter les données sur base multi-critères. La clause pourrait être WHERE IN ('a', 'b') mais aussi ('a', 'b', 'c'), avec un nombre variable de paramètres dans la clause IN.
J'ai naïvement successivement essayé :
- De construire la clause WHERE IN (?1) en passant String s = "'a', 'b', 'c'" -> aucune ligne retournée;
- Dans une tentative de hacking, je me suis dit que le paramètre ?1 était remplacé par '[la chaîne s]', et que donc, je devrais essayer de ne pas passer les guillemets simples ouvrants et fermants : String s = "a', 'b', 'c"; -> idem;
- De passer une collection pour le troisième paramètre -> ça ne compile même pas.
Existe-t-il une solution élégante et efficace, sans devoir passer par JDBC ?
Merci.
Message édité par sircam le 30-11-2004 à 10:24:48
---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}