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

  FORUM HardWare.fr
  Programmation
  Java

  [Hibernate]Filtrer une requete avec une methode java

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Hibernate]Filtrer une requete avec une methode java

n°1305846
patapon
I Was Here
Posté le 15-02-2006 à 10:40:53  profilanswer
 

Bonjour,
 
ja voudrais savoir s'il hibernate donnait la possibilité de filtrer le resultat d'une requete à l'aide d'une methode java; je m'explique :
 
je travaille actuellement sur une application qui construit une requete dynamique en hql, puis l'execute et renvoie une liste de resultats. j'utilise egalement les possibilités de pagination de hibernate (maxResult, firstResult) et calcule le nombre total de pages à l'aide d'un count(*).
 
Cependant, je dois dorenavant gerer la securite liée à cette recherche, en excluant certains resultats retournés. Le problème est que la fonction qui m'est fournie pour gerer la validité de mes resultats (supposons qu'ils soient des instances de la classe MyBean) est de la forme

Code :
  1. boolean isBeanAuthorized(MyBean var);


 
Si je fais le filtrage à posteriori, ma pagination tombe à l'eau (sur une requete retournant 40 resultats, il se peut que j'en garde 12, 22, 40 voire 0 ce qui m'oblige à faire plusieurs requetes pour gerer ma page et surtout qui rend impossible le calcul du nombre total de pages, car rapatrier tous les enregistrements de la table et les filtrer un par un pour savoir combien sont valides n'est pas viable au vu de la taille de la table).
 
Bref, il faut que j'effectue mon filtrage au moment de la requete. Or les contraintes qui me sont imposées (en particulier le fait que je ne sache rien de la methode de validation des données si ce n'est sa signature) font que je ne vois pas comment m'en sortir. Hibernate donne la possibilité d'effectuer des filtres mais de ce que j'en ai vu, ça reste assez limité (et ça ne convient pas pour que que je veux faire)
 
Bref, si quelqu'un a une solution (ou une piste) qui me permettrait de fire mon filtre tout en gardant la pagination et notamment en pouvant calculer le nombre de pages retournés par la requete, je suis preneur.
 
Merci :jap:
 
(j'utilise hibernate 3.0, une base oracle 9i et un jdk 1.4.3)


---------------
.
mood
Publicité
Posté le 15-02-2006 à 10:40:53  profilanswer
 

n°1305888
brisssou
8-/
Posté le 15-02-2006 à 11:04:00  profilanswer
 

je dirais qu'il faut que tu arrive à transposer la logique de ta méthode dans ta requête HQL...

n°1305905
patapon
I Was Here
Posté le 15-02-2006 à 11:15:20  profilanswer
 

brisssou a écrit :

je dirais qu'il faut que tu arrive à transposer la logique de ta méthode dans ta requête HQL...


 
 
Si seulement je pouvais :'(
 
L'application sur laquelle je travaille est en fait un module d'une application plus grosse (et surtout distribuée). La communication entre les differents modules se fait par un flux xml et le module qui s'occupe du filtrage s'appuie sur une autre table à laquelle je n'ai pas du tout accès. Donc quand bien meme j'aurais accès à la logique applicative, la table contenant les gestions de restrictions m'est invisible (en supposant qu'elle soit contenue dans le meme sgbdr ce qui n'est meme pas sur d'ailleurs...)
 
A l'heure actuelle, je vais laisser tomber l'affichage du nombre de pages et m'appuyer sur la pagination de hibernate pour faire ma propre pagination apres filtrage. Néanmoins, ça reste une regression fonctionnelle ( :( ) mais je vois pas quoi faire d'autre.


---------------
.
n°1305950
brisssou
8-/
Posté le 15-02-2006 à 11:43:37  profilanswer
 

alors là... pfr

n°1306075
the real m​oins moins
Posté le 15-02-2006 à 13:28:47  profilanswer
 

il me semble que tu peux "customiser" la pagination - i.e. fournir tes propres implementations des classes qui la gèrent.
(en wrappant les originales ça doit pas etre bien compliqué)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1306552
patapon
I Was Here
Posté le 15-02-2006 à 17:16:17  profilanswer
 

the real moins moins a écrit :

il me semble que tu peux "customiser" la pagination - i.e. fournir tes propres implementations des classes qui la gèrent.
(en wrappant les originales ça doit pas etre bien compliqué)


 
 
je ne pense pas que ça soit possible :\
 
Visiblement, hibernate effectue la pagination en utilisant les fonctionnalités du sgdb; sous oracle il englobe la requete dans une autre requete du type :
 

Code :
  1. select * from
  2. ( select row_.*, rownum rownum_
  3.    from ( ma_requete) ) row_
  4.    where rownum <= ?)
  5. where rownum_ > ?


 
A aucun moment, il n'est possible de specifier des contraintes "java" lors de la requete/pagination, hibernate convertit tout en sql et balance ça au sgbdr...
 
de toutes façons, je crois que mon problème est insoluble en l'etat :'(, je vais essayer d'iterer sur tous les resultats mais en terme de perfs, c'est vraiment pas terrible (pour ne pas dire catastrophique...).


---------------
.

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

  [Hibernate]Filtrer une requete avec une methode java

 

Sujets relatifs
Prendre le controle d'un pc par internet via une machine JAVA/VNC[SQL] Requête multi-tables + DISTINCT ...
Java & DreamweaverEquivalent jad pour passer du .java au .jsp
Soumettre une requête XMLPartager des instances de classe entre java et C#
Listage de fichier ls -l avec Javaprobleme requete
la wifi en java[Java J2EE Servlet] récupérer des fichiers inclus dans un war
Plus de sujets relatifs à : [Hibernate]Filtrer une requete avec une methode java


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