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

Hibernate Java Discussion :

Requete Not In avec Hibernate


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut Requete Not In avec Hibernate
    Bonjour j'aimerais faire une requete avec un not in en utilisant les Criteria d'Hibernate. C'est possible ?

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select * from Marche where id not in (Select id from Marche where acteur = 1);
    Il faut savoir que j'ai déjà une fonction qui me renvoie la liste les marchés associés à un acteur. C'est juste la premiere partie de la requete qui me pose probleme

  2. #2
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    utilise Restrictions.not(Restrictions.in) pour les négations

    mais dans ton cas, ce n'est pas plus simple de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select * from Marche where acteur != 1;
    ?
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Ma requête est plus compliquée que celle que j'ai donnée. Ca n'est pas aussi simple .

    Je me suis tourné vers le Restrictions.not(Restrictions.in(...,...)). Sauf que le premier argument de Restrictions.in est le nom de la propriété hormis dans mon cas je voudrais tester l'objet en lui meme. Je fais comment du coup (je suis dans une méthode statique donc pas de this)

  4. #4
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    ouh la ça s'embrouille où est-ce que tu se trouve ta methode statique ? dans... Marche ??

    sinon tester l'objet c'est tester son id donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Restrictions.in("id", listOfIds)
    devrait passer

    j'ai bien suivi jusque la ?

    si ce n'est pas le cas je pense qu'il va falloir poster qques lignes de codes :p
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 72
    Points : 52
    Points
    52
    Par défaut
    Oui ma fonction statique se trouve dans Marche. Cependant le principe de Hibernate c'est de tester les objets non ?

    Ma premiere fonction me renvoie donc une liste de marche qui sont les objets que je ne veux pas dans mon résultats.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    	public static List<Marche> getAllMarcheByST(SousTraitant monST) {
    		Criteria c = HibernateUtil.createCriteria(CoefficientSousTraitant.class);
    		c.setProjection(Projections.property("marche"));
    		c.add(Restrictions.eq("sousTraitant", monST));
    		c.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY);
    		return c.list();
    	}
    J'essaye donc dans ma fonction de faire un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		c.add(Restrictions.not(Restrictions.in("?????",getAllMarcheByST(monST))))

  6. #6
    Membre éprouvé Avatar de Gardyen
    Homme Profil pro
    Bio informaticien
    Inscrit en
    Août 2005
    Messages
    637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Bio informaticien

    Informations forums :
    Inscription : Août 2005
    Messages : 637
    Points : 1 050
    Points
    1 050
    Par défaut
    quand je disais que ça s'embrouillait...

    déjà tu devrais être capable de faire ça en une requête, si tu as mappé correctement l'association entre CoefficientSousTraitant et Marche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Criteria criteria = session.createCriteria(Marche.class)
         .createCriteria("CoeffSousTraitant") // ou CoeffSousTraitantSet si c'est du to-many
         .add(Restrictions.ne("sousTraitant", monST))
    ;
    Donc comment est mappée l'association entre les 2 objets?

    sinon dans ta requête essayes "id' comme propriété, c'est un mot-clé désignant la clé primaire de ton objet
    Nous les geeks, c'est pas qu'on a une case en moins, c'est juste qu'on compte à partir de zéro.
    Plus les choses changent, plus elles restent les mêmes

Discussions similaires

  1. Recuperer le noms des attributs d'une requete avec Hibernate
    Par Molkobain dans le forum Hibernate
    Réponses: 11
    Dernier message: 11/03/2009, 08h48
  2. Une requete de slection avec not exists
    Par abbd dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/02/2009, 19h09
  3. probléme d'exécution de requete avec hibernate
    Par yazen dans le forum Persistance des données
    Réponses: 3
    Dernier message: 17/06/2008, 11h36
  4. Problème requete SQL avec hibernate
    Par kakahn dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/01/2008, 12h08
  5. Problème de requete imbriquée avec hibernate
    Par Lolitaaa dans le forum Hibernate
    Réponses: 2
    Dernier message: 23/03/2007, 13h13

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