Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1678 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  EJB-QL : Clause where in dynamique [résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

EJB-QL : Clause where in dynamique [résolu]

n°909068
sircam
I Like Trains
Posté le 27-11-2004 à 11:42:59  profilanswer
 

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.  [:crosscrusher]


Message édité par sircam le 30-11-2004 à 10:24:48

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
mood
Publicité
Posté le 27-11-2004 à 11:42:59  profilanswer
 

n°909282
darklord
You're welcome
Posté le 27-11-2004 à 19:32:01  profilanswer
 

[:blueflag]
 
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?
 

n°909630
sircam
I Like Trains
Posté le 28-11-2004 à 13:43:30  profilanswer
 

darklord a écrit :

[:blueflag]
 
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?


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.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910577
darklord
You're welcome
Posté le 29-11-2004 à 19:16:16  profilanswer
 

Oui, c'est application-server specific.
 
Weblogic 6.1, laisse tomber :/


---------------
Just because you feel good does not make you right
n°910584
sircam
I Like Trains
Posté le 29-11-2004 à 19:28:23  profilanswer
 

darklord a écrit :

Weblogic 6.1, laisse tomber :/


Parce que tu crois que j'ai le choix  :p


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910712
nraynaud
lol
Posté le 29-11-2004 à 21:40:23  profilanswer
 

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).


Message édité par nraynaud le 29-11-2004 à 22:11:07

---------------
trainoo.com, c'est fini
n°910729
sircam
I Like Trains
Posté le 29-11-2004 à 22:00:13  profilanswer
 

Exemple de contexte (je simplifie car le cas d'espèce est trop abstrait en changeant les noms de table et de champs) : j'ai une table "transactions" dont un des champs est "status". Status peut prendre plusieurs valeurs : "alpha", "beta", "gamma", "delta".
 
Je veux pouvoir retrouver une collection d'entity beans qui corresponde à la liste des "transactions" ayant un "status" donné, ou une combinaison d'un certain nombre de "status" :
- tous les "alpha";
- tous les "beta" et tous les "gamma";
- tous les "delta" et tous les "alpha" et tous les "gamma";
- etc
 
Si je travaillais en JDBC, je construirais p.e. dynamiquement la clause IN du query, qui ressemblerait respectivement à :
- IN ('alpha');
- IN ('beta', 'gamma');
- IN ('delta', 'alpha', 'gamma');
 
en fonction d'une collection de "status" passée en paramètre (une clause WHERE avec des OR donnerait un résultat identique).
 
C'est ce que j'entends par "dynamique". Un cas somme tout élémentaire, mais qui ne semble pas se prêter à un query EJB dirait-on, et c'est fort regretable.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910766
nraynaud
lol
Posté le 29-11-2004 à 22:14:19  profilanswer
 

les valeurs prises par le champ "status", elle sont en nombre fixe ou c'est appellé à augmenter ?
 
là je songe à un index sur "status", puis autant de Select que nécessaire dessus.


---------------
trainoo.com, c'est fini
n°910779
sircam
I Like Trains
Posté le 29-11-2004 à 22:19:29  profilanswer
 

nraynaud a écrit :

les valeurs prises par le champ "status", elle sont en nombre fixe ou c'est appellé à augmenter ?
 
là je songe à un index sur "status", puis autant de Select que nécessaire dessus.


C'est en nombre à peu près fixe. Dans le cas présent, il y d'autres alternatives, mais je reste sur ma faim. Si d'aventure le nombre de "filtres" venait à s'élargir, on aimerait avoir en tête une solution robuste et généralisable sous la main.
 
Plusieurs selects : bof bof bof. Sur le temps de réponse total, la communication application server / database n'est pas négligeable. Répeter les selects, c'est pas top. Outre le fait qu'il faille ensuite concatener les différentes collections retournées.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910780
nraynaud
lol
Posté le 29-11-2004 à 22:20:39  profilanswer
 

ah non !!!!!
 
page 249 :
{single_valued_cmr_path_expression | identification_variable | intput_parameter} [NOT] MEMBER [OF] collection_valuated_path_expression


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 29-11-2004 à 22:20:39  profilanswer
 

n°910786
nraynaud
lol
Posté le 29-11-2004 à 22:22:51  profilanswer
 

sircam a écrit :

la communication application server / database n'est pas négligeable. Répeter les selects, c'est pas top. Outre le fait qu'il faille ensuite concatener les différentes collections retournées.

1) on est *dans* le serveur là
2) rien de t'oblige à les tirer tout de suite de la bdd
3) la concaténation est gratuite chez les gens normaux.


---------------
trainoo.com, c'est fini
n°910795
nraynaud
lol
Posté le 29-11-2004 à 22:24:32  profilanswer
 

(les fautes dans les non-terminaux de la grammaire, c'est parce que je les tape à la main, ils parlent à peu près bien anglais chez java)


---------------
trainoo.com, c'est fini
n°910839
sircam
I Like Trains
Posté le 29-11-2004 à 22:36:11  profilanswer
 

EJB-QL BNF : tu pourrais être plus explicite sur le passage qui tu cites ? Je ne parviens pas à faire le rattachement avec where_clause ::= WHERE conditional_expression, si c'est de ça dont tu veux parler.
 
1) :heink: SELECT -> heu envoyé par l'application server au dbms, qui l'exécute et renvoie le résultat (?!?)
2) "Les tirer de la db" -> mais si tu fais l'appel à la DB, beh, il est fait, l'appel ?
3) Oui, c'est pas un problème.
 
J'ai un peu de mal à te suivre, ce soir, sans doute besoin d'un peu de repos, ne m'en veux pas.  :sol:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910865
the real m​oins moins
Posté le 29-11-2004 à 22:44:49  profilanswer
 

c'est ptet con, mais tu peux pas filer une collection ou un array comme argument a ton ejbql? [:slackerbitch]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°910868
sircam
I Like Trains
Posté le 29-11-2004 à 22:47:03  profilanswer
 

the real moins moins a écrit :

c'est ptet con, mais tu peux pas filer une collection ou un array comme argument a ton ejbql? [:slackerbitch]


J'ai essayé le coup de la collection, dans la série "essaye pour voir ça va p'têt marcher", mais ça compilait pô - pas noté le message, j'ai laissé de côté dans un coup de rage et j'ai pris la solution dirty  :(


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910870
nraynaud
lol
Posté le 29-11-2004 à 22:47:18  profilanswer
 

pour la BNF : ce que je cite est  
collection_member_expression ::= <mon truc d'au-dessus>
 
et collection_member_expression, c'est une simple_cond_expression.
 
en clair :  

Code :
  1. SELECT OBJECT(o) FROM Pipo o WHERE o.status MEMBER OF ?1


et tu bindes un Arrays.asList(new String[]{"pipo", "pipi"}) sur l'argument 1.
 
ça fait *exactement* ce que tu veux.


---------------
trainoo.com, c'est fini
n°910871
the real m​oins moins
Posté le 29-11-2004 à 22:47:56  profilanswer
 

keske je disais :o


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°910872
the real m​oins moins
Posté le 29-11-2004 à 22:48:24  profilanswer
 

sircam >> ton finder etait probablement pas bien déclaré !?
tu utilises xdoclet ou tu fais tout à la main?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°910886
sircam
I Like Trains
Posté le 29-11-2004 à 22:55:05  profilanswer
 

[:super chinois]
 
Mais c'est tout con ! Voilà, j'étais passé à côté. Merci beaucoup. C'est super élégant. Je vais bien dormir cette nuit.
 
Bien vu !
 
Real : je fais tout à la main  [:crusty128]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910892
nraynaud
lol
Posté le 29-11-2004 à 22:59:39  profilanswer
 

quand je pense que j'ai jamais développé une appli J2EE de ma vie et que je demande que ça ...


---------------
trainoo.com, c'est fini
n°910901
sircam
I Like Trains
Posté le 29-11-2004 à 23:05:38  profilanswer
 

nraynaud a écrit :

quand je pense que j'ai jamais développé une appli J2EE de ma vie et que je demande que ça ...


Beuah  :heink: ?
 
Bof, on en revient.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°910904
nraynaud
lol
Posté le 29-11-2004 à 23:07:58  profilanswer
 

J'en suis *déjà* revenu, mais c'est le seul moyen de rentrer en dev. Et puis il doit y avoir des aspects que j'avais pas vu, comme quand je me suis lancé dans les javabeans.


---------------
trainoo.com, c'est fini
n°912866
sircam
I Like Trains
Posté le 02-12-2004 à 13:54:43  profilanswer
 

[:toad666] Ca marche pas avec Weblogic 6.1 ! Repli sur la solution "dirty". [:sisicaivrai]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°912896
the real m​oins moins
Posté le 02-12-2004 à 14:26:26  profilanswer
 

keski marche pas avec wl ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°916725
sircam
I Like Trains
Posté le 07-12-2004 à 10:14:41  profilanswer
 

Beh, le MEMBER OF. EJBC rouspète, syntaxe incorrecte. Et effectivement, on en trouve trace dans la doc 7.0, mais rien en 6.1...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°916800
the real m​oins moins
Posté le 07-12-2004 à 11:19:27  profilanswer
 

c'est l'occasion de convaincre les décideur de jeter cette merde [:tartalap]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°916840
sircam
I Like Trains
Posté le 07-12-2004 à 11:51:54  profilanswer
 

C'est pas comme ça que ça marche, faut pas rêver :-/
 
A l'echelle du projet, ce genre de soucis est sans importance aucune et ne remet pas en cause le choix de l'architecture...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°916936
the real m​oins moins
Posté le 07-12-2004 à 13:30:46  profilanswer
 

je te parle plus des outils que de l'architecture


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°916989
sircam
I Like Trains
Posté le 07-12-2004 à 14:13:22  profilanswer
 

Ca reste d'autant plus d'application.
 [:manu512]


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°918269
darklord
You're welcome
Posté le 08-12-2004 à 19:57:20  profilanswer
 

sircam a écrit :

[:toad666] Ca marche pas avec Weblogic 6.1 ! Repli sur la solution "dirty". [:sisicaivrai]


 
bin vi, je t'avais dit de laisser tomber :D


---------------
Just because you feel good does not make you right
n°918274
the real m​oins moins
Posté le 08-12-2004 à 20:04:28  profilanswer
 

tu avais surtout dit qu'il n'y avait pas de solution standard :o

n°918577
sircam
I Like Trains
Posté le 09-12-2004 à 09:18:21  profilanswer
 

Bah, j'avais une solution, mais je c'était pour la beauté du geste, pour faire propre.
 
Au moins, on a appris qq chose.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°921215
darklord
You're welcome
Posté le 12-12-2004 à 20:20:09  profilanswer
 

the real moins moins a écrit :

tu avais surtout dit qu'il n'y avait pas de solution standard :o


 
Et que weblogic 6.x est une belle merde au niveua implémentation (que ce soit le standard ou pas d'ailleurs).


---------------
Just because you feel good does not make you right
n°921249
sircam
I Like Trains
Posté le 12-12-2004 à 20:46:46  profilanswer
 

darklord a écrit :

Et que weblogic 6.x est une belle merde au niveua implémentation (que ce soit le standard ou pas d'ailleurs).


J'ose espérer que ça s'améliore avec la version 8 et la 9 à venir...


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°921281
benou
Posté le 12-12-2004 à 21:17:53  profilanswer
 

elle vient pas de sortir la 9 ?

n°921284
sircam
I Like Trains
Posté le 12-12-2004 à 21:22:07  profilanswer
 

en beta, non ?


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°921289
nraynaud
lol
Posté le 12-12-2004 à 21:26:45  profilanswer
 

sircam a écrit :

hen t'es un gros beta, non ?

han lalalala, il insulte le nouveau modo !!!


---------------
trainoo.com, c'est fini
n°921294
sircam
I Like Trains
Posté le 12-12-2004 à 21:30:48  profilanswer
 

Pas de pollution de mon topic  :sol:


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°921296
nraynaud
lol
Posté le 12-12-2004 à 21:32:15  profilanswer
 

[:dawa]


---------------
trainoo.com, c'est fini
n°923329
nraynaud
lol
Posté le 14-12-2004 à 21:42:37  profilanswer
 

sircam a écrit :

en beta, non ?

http://today.java.net/pub/n/2037


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  EJB-QL : Clause where in dynamique [résolu]

 

Sujets relatifs
Jdeveloper Lier un EJB session à un EJB entitémes threads font ce qu'il veulent ! [Pas tout à fait resolu]
[C/UNIX] *Resolu* Les threads[SQL / Résolu] Création d'une vue depuis une PS
[MySQL] WHERE avec NOT IN[PHP] Recuperer des valeurs = 0 apres un post [Resolu]
spécifier la couleur de <hr > (xhtml 1.0) [résolu]tritement dynamique d'un formulaire
probleme de requete[resolu][tomcat][log4j] Résolu : séparer les logs
Plus de sujets relatifs à : EJB-QL : Clause where in dynamique [résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR