IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JPA Java Discussion :

JPA 2 : Criteria Any => Critère sur les objets lazyloader


Sujet :

JPA Java

  1. #1
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut JPA 2 : Criteria Any => Critère sur les objets lazyloader
    Bonjour,

    Je me suis lancer dans JPA2 récemment que j'utilise avec Hibernate 3.5.6 comme implémentation.

    J'ai un objet Personne sur lequel je fais ma requête findById.
    Cette objet personne contient plusieurs attibuts (nom, prenom....) ainsi qu'un Set d'objet Evenement.
    Actuellement quand j'accède au Set d'objet Evenement, il me les ramène tous via lazyload.
    Et j'aimerais filtrer et qu'il me ramène que les Evenement dont la date (attibut : dateEvenement ) est supérieur à celle d'aujourd'hui.

    Et donc je voudrais ajouter ces critères dans une méthode findByIdWithEventCrieteria par exemple me permettant de récupérer un objet Personne avec le Set d'Evenement uniquement supérieur ou egal à la date du jour.

    Est ce quelqu'un peut m'aider svp ? car je galère depuis 2 jours pour ajouter des critères à ceux Set ....

    Merci d'avance

  2. #2
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Toujours personne pour m'aiguiller ?

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    Citation Envoyé par garthos Voir le message
    Toujours personne pour m'aiguiller ?
    Il y a potentiellement 2 aspects à résoudre :

    - le query : pour cela lisez http://download.oracle.com/docs/cd/E...angref_all_any ce qui concerne ANY ou EXISTS devrait vous aider

    si le but serait d'avoir un query qui ne retourne que les Personnes qui ont un Evènement dont la date correspond à votre critère
    mais ce n'est peut-être pas nécessaire dans votre cas d'utilisation si vous ne désirez pas re-sélectionner les Personnes selon ce critère

    - le filtrage de la collection : voir @org.hibernate.annotations.FilterDef et @org.hibernate.annotations.Filter
    voir aussi http://docs.jboss.org/hibernate/core...l/filters.html

  4. #4
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Bonsoir,

    Je pige pas trop l'histoire du Any ... peux tu m'en dire plus ? l'exemple du site n'est pas très claire du tout ...
    De plus c'est du JPQL mais bon à la rigueur pourquoi pas, c'est pas possible en full Criteria JPA2.0 ?

    pour la 2ème soluce ? est ce que c'est spécifique Hibernate le FilterDef ? car j'aimerais rester full JPA2.0 et surtout est ce qu'il charge quand même toute la collection depuis la base car je peux avoir des milliers d'événement?

    merci d'avance

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 962
    Par défaut
    Citation Envoyé par garthos Voir le message
    Bonsoir,

    Je pige pas trop l'histoire du Any ... peux tu m'en dire plus ? l'exemple du site n'est pas très claire du tout ...
    De plus c'est du JPQL mais bon à la rigueur pourquoi pas, c'est pas possible en full Criteria JPA2.0 ?

    pour la 2ème soluce ? est ce que c'est spécifique Hibernate le FilterDef ? car j'aimerais rester full JPA2.0 et surtout est ce qu'il charge quand même toute la collection depuis la base car je peux avoir des milliers d'événement?

    merci d'avance
    ANY : il vous faut les Person dont au moins un (ou n'importe quel… donc ANY) Event satisfait le critère de date
    (EXISTS pourrait fonctionner sans doute aussi dans votre cas…)

    le FilterDef d'Hibernate permet par contre d'avoir dans l'entité Person un Set dont les Event seront uniquement ceux qui satisfont au critère,
    donc ce n'est pas le même usage… puisque lui intervient après le chargement de Person… lors que chargement du Set.

    Si vous vous contentez de faire la partie query, vous aurez les Person qui correspondent au critère mais dans le Set vous aurez aussi les Event qui n'y satisfont pas, la seule chose que le query vous garantit c'est qu'au moins un Event de la Person satisfait le critère, mais le fetch de la collection va les charger tous indépendamment du Criteria puisque lui sera sans doute base sur Person comme classe "root".

    (et si vous utilisiez ALL alors vous n'auriez que les Person dont TOUS les Event satisfont le critère…)

  6. #6
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Est qu'il est possible d'avoir un exemple stp ?

    Car je t'avouerais que ce n'est pas claire du tout là ...

    Merci d'avance

  7. #7
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    alors j'ai trouver qqch sur le net qui a l'air de ressembler a ce que je veux faire avec la fonction exist mais pour le moment ça ne marche pas .

    voilà ou j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public TArtist findArtistById(String id) {
    	CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    	CriteriaQuery<TArtist> query = cb.createQuery(TArtist.class);
    	Root<TArtist> artistRoot = query.from(TArtist.class);
     
    	Subquery<TEvent> subquery = query.subquery(TEvent.class);
    	Root<TEvent> eventRoot = subquery.from(TEvent.class);
    	subquery.select(eventRoot);
    	subquery.correlate(artistRoot);
    	subquery.where(cb.greaterThan(eventRoot.<Date> get("eventDate"),new Date()));
     
    	query.select(artistRoot);
    	query.where(cb.and(
    					cb.equal(artistRoot.<String> get("id"),id),							
    					cb.exists(subquery))
    	);
     
    		return entityManager.createQuery(query).getSingleResult();
    je pense qu'il faudrait que j'arrive à utiliser 'any' mais pour le moment je galère grave ...

    merci

  8. #8
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Donc personne pour un exemple de l'utilisation de Any() ?

    merci d'avance

  9. #9
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Bon ba j'ai toujours pas réussi a résoudre ce problème ... donc je relance et si quelqu'un a une idée ...

    Merci d'avance

  10. #10
    Membre très actif
    Inscrit en
    Juin 2005
    Messages
    210
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 210
    Par défaut
    Je relance mon post ....
    J'ai bien évidemment contourner depuis le temps mais je n'ai toujours pas trouver comment faire ceci donc si quelqu'un sait ! ça m’intéresse toujours !

    Merci d'avance

Discussions similaires

  1. formule somme.si.ens avec critére sur les dates
    Par AMEDDO79 dans le forum Excel
    Réponses: 15
    Dernier message: 10/02/2016, 10h35
  2. Requêtes avec critères sur les dates
    Par marcelstan dans le forum Access
    Réponses: 11
    Dernier message: 14/05/2014, 16h20
  3. Renvoyer lignes correspondant à un critère sur les colonne
    Par Stepsbysteps dans le forum MATLAB
    Réponses: 4
    Dernier message: 23/02/2013, 13h44
  4. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo