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 :

Requête sur clé composite


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut Requête sur clé composite
    Bonjour,

    j'ai une requete sql comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT t FROM Terrain t WHERE t.sportSaison=:IDSaison
    ou sportSaison est un objet avec une clé composite : IDSport et IDSaison

    Mais dans mon terrain, il est déclaré comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @ManyToMany(mappedBy="terrains")
    private Set<Sportsaison> sportSaison;
    quand j'excute ma requête en passant comme objet un sport, j'ai une erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    java.lang.IllegalArgumentException: Parameter value [ch.plugin.sportreserv.entity.Sportsaison[ sportsaisonPK=ch.plugin.sportreserv.entity.SportsaisonPK[ iDSport=1, iDSaison=1 ] ]] was not matching type [java.util.Set]
    Comme on peut le voir, le sportsaison passé en paramètre est bon. Mais pourquoi le matching ne se fait pas ? d'où peut venir le problème?

  2. #2
    Membre émérite Avatar de NicoL__
    Homme Profil pro
    Architecte
    Inscrit en
    Janvier 2011
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Janvier 2011
    Messages : 399
    Par défaut
    A priori il faut passer un Set de sport, tu peux y mettre un élément unique dans le Set.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Merci de ton aide !

    Mais malheureusement ca ne marche pas.

    Voici le code tester :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    public List<Terrain> getTerrainBySportSaison(Sportsaison sport){
            try{
                Set<Sportsaison> test = new HashSet<Sportsaison>();
                test.add(sport);
                return em.createNamedQuery("TerrainBySportSaison").setParameter("IDSaison", test).getResultList();
            }catch(Throwable th){
                throw new SportReservExceptions(getClass().getName() + " -> " + th);
            }
        }
    et voilà l'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ch.plugin.sportreserv.exceptions.SportReservExceptions: ch.plugin.sportreserv.dao.TerrainFacade -> java.lang.IllegalArgumentException: Parameter value [ch.plugin.sportreserv.entity.Sportsaison[ sportsaisonPK=ch.plugin.sportreserv.entity.SportsaisonPK[ iDSport=ch.plugin.sportreserv.entity.Sport[ iDSport=1 ], iDSaison=ch.plugin.sportreserv.entity.Saison[ iDSaison=1 ] ] ]] was not matching type [java.util.Set]

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    les associations ne s'explorent pas ocmme ça avec hibernate, il faut faire des jointures, comme en SQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t FROM Terrain t join t.sportSaison as saison WHERE saison.id=:IDSaison

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 138
    Par défaut
    Yeah t'es un roi ! Ca marche super comme ca merci beaucoup !

    j'avais lu que les jointures étaient automatiques

    Voilà ma requête final :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT t FROM Terrain t join t.sportSaison as saison WHERE saison=:IDSaison

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [ADO] Requète sur dates
    Par cdlr27 dans le forum Bases de données
    Réponses: 3
    Dernier message: 26/01/2005, 22h39
  2. Requête sur un MemData
    Par claude dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/12/2004, 10h11
  3. Requête sur date
    Par guenfood dans le forum Access
    Réponses: 11
    Dernier message: 08/12/2004, 16h11
  4. Requête sur un serveur lié
    Par Guizz dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 06/08/2003, 11h35
  5. requête sur l'année d'une date
    Par jo77 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 30/07/2003, 09h28

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