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 select Aide


Sujet :

Hibernate Java

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut Requete select Aide
    Bonsoir,

    Je suis entrain de travailler avec le framework hibernate et je veux extraire toutes les données d'une table dans ma base de données . pour cela j'ai fait la méthode suivante mais malheureusement elle marche pas et je sais pas pourquoi.Je voudrais bien que vous m’aider s'il vous plait.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    	public List<Emploipreference> getEmploipreferenceByTypeJob(int idtypeemploi) {
     
    		Session session=getSessionFactory().getCurrentSession();
    		Transaction trans=session.beginTransaction();
    		List list = getSessionFactory().getCurrentSession().createQuery("select distinct(e.typeemploi),e.candidat from Emploipreference e ")
            .setParameter(0, idtypeemploi).list();
    		trans.commit();
            return list;
    	}

    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    pour utiliser setParameter, il faut avoir une clause where avec le paramètre dedans, genre "where typeemploi=?"

    Ensuite, ta requête ne retourne pas des "Emploipreference", mais des paires [typemploi,candidat]
    Enfin, le function distinct s'utilise avec un group by, ce que tu n'utilise pas.

    Bref, ta requête n'a ni queue ni tête, je te conseille de commencer par lire la doc hibernate sur le language de requêtes.

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    J'ai peu modifier comme ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    	public List<Emploipreference> getEmploipreferenceByTypeJob(int idtypeemploi) {
     
    		Session session=getSessionFactory().getCurrentSession();
    		Transaction trans=session.beginTransaction();
    		List list = getSessionFactory().getCurrentSession().createQuery("select DISTINCT (emppref.typeemploi),emppref.candidat.id from Emploipreference emppref where emppref.typeemploi.id=? group by emppref.typeemploi")
            .setParameter(0, idtypeemploi).list();
    		trans.commit();
            return list;
    	}
    mais j'obtiens l'erreur suivante

    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.model.Emploipreference

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "select DISTINCT (emppref.typeemploi),emppref.candidat.id
    Ca te retourne une paire [typeemploi,id], ce qui n'a rien à voir avec la classe Emploipreference.
    Autrement dit, ta sortir de Query.list(), ici, te retourne une List<Object[]>


    Pourquoi tu joue avec distinct, avec group by, pourquoi tu query des colonne particulière, alors que, si je comprend bien le nom de la méthode, tout ce qui t'intéresse, c'est de récupérer la table Emploipreference ??


    Tu dois retirer le distinct (tu peux même carrément retirer le select) et juste choisir la table et ta clause where. Y a pas besoin de se triturer les méninge sur un besoin aussi basique.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    si je vais jouer avec seulement le from et where comment ça sera ma requête alors que moi j'ai besoin du distinct ?

    Vous pouvez me solutionner s'il vous plait ?

    Merci

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    si t'expliquait ce que tu veux faire comme requête, parce que je ne vois pas pourquoi tu aurais besoin de faire un distinct

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    si je voudrais avoir la table emploipreference mais pour attribut typeemploi qui est une clé étrangère je voudrais qu'il soit distinct.

    Est-ce-que vous pouvez me donner un exemple de requête avec un select distinct ... avec une clause where aussi parce que je me bloque c'est tout

    Merci

  8. #8
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    le returnValue n´est pas compatible avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      List list = getSessionFactory().getCurrentSession().createQuery("select DISTINCT (emppref.typeemploi),emppref.candidat.id from Emploipreference emppref where emppref.typeemploi.id=? group by emppref.typeemploi")
            .setParameter(0, idtypeemploi).list();
      return list;
    de ta methode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getEmploipreferenceByTypeJob(int idtypeemploi)
    .
    mais ce que tu demandes, je ne comprend pas:
    exemple :
    candidat 1 | typeemploi1
    candidat 2 | typeemploi1

    tu voudrais supprimer qui ici?

    Merci

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    par exemple si j'ai candidat 1 ---> typeemploi 1
    candidat 1---> typeemploi 1
    candidat 1 -->typeemploi2

    Je veux afficher candidat 1 ---> typeemploi 1
    candidat 1---> typeemploi 2


    J'affiche deux ligne et pas 3 parce que typeemploi 1 existe déjà deux fois

  10. #10
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    alors ta requete est juste, mais il va te reourner une liste d´objet ayant 2 elements.

    change ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List<Emploipreference> getEmploipreferenceByTypeJob(int idtypeemploi) {
    en:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public List getEmploipreferenceByTypeJob(int idtypeemploi) {
    et ca va marcher.
    car l´objet retourner est du type:
    et non Eric

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    j'ai eu ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.NumberFormatException: For input string: "typeemploi"

  12. #12
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    tu utilises quelle requetes?
    peux-tu nous donner la methode en entier?

    voici a quoi devrait ressembler ta requete.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    List list = getSessionFactory().getCurrentSession().createQuery("select DISTINCT (typeemp.xxx),emppref.candidat.id from Emploipreference emppref join emppref.typeemploi typeemp where typeemp.id=?")
    		        .setParameter(0, idtypeemploi).list();
    //xxx = nom de la colonne que tu veux pas double, ici serait sans doute le id.  typeemp.xxx == typeemp.id
    Eric

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    @Override
    	public List getEmploipreferenceByTypeJob(int idtypeemploi) {
     
    		Session session=getSessionFactory().getCurrentSession();
    		Transaction trans=session.beginTransaction();
    		 List list = getSessionFactory().getCurrentSession().createQuery("select DISTINCT (emppref.typeemploi.description),emppref.candidat.id from Emploipreference emppref where emppref.typeemploi.id=? group by emppref.typeemploi")
    	        .setParameter(0, idtypeemploi).list();
    trans.commit();
            return list;
    	}

  14. #14
    Membre chevronné Avatar de jeffray03
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2008
    Messages
    1 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 501
    Points : 2 120
    Points
    2 120
    Par défaut
    Et t'as quoi comme erreur?

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.NumberFormatException: For input string: "typeemploi"

  16. #16
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Bonjour,

    Dans le log de l'erreur il n'y a pas une partie "Caused by..."?

    Au hasard: essaie "group by emppref.typeemploi.idtypeemploi".
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  17. #17
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    Non il n y a que cette ligne

    Sinon mes classes sont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    @Entity
    @Table(name = "emploipreference", catalog = "abc")
    public class Emploipreference implements java.io.Serializable {
     
    	private Integer idemploipreference;
    	private Typeemploi typeemploi;

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    @Entity
    @Table(name = "typeemploi", catalog = "abc")
    public class Typeemploi implements java.io.Serializable {
     
    	private Integer id;
    	private String description;
     
    	.....

  18. #18
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    Supprime temporairement la clause GROUP BY, histoire de voir qu'est-ce que ça donne.

    EDIT: As-tu essayé la requête proposée par @jeffray03, avec le JOIN?
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

  19. #19
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    790
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations forums :
    Inscription : Mai 2011
    Messages : 790
    Points : 443
    Points
    443
    Par défaut
    toujours la même chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.NumberFormatException: For input string: "typeemploi"

  20. #20
    Traductrice
    Avatar de Mishulyna
    Femme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2008
    Messages
    1 504
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2008
    Messages : 1 504
    Points : 7 840
    Points
    7 840
    Par défaut
    J'ai fait un petit essai en SQL, apparemment il n'y a pas moyen d'accéder à "emploipreference.typeemploi.description" de cette façon (ce qui est un peu normal car de point de vue DB, "emploipreference.typeemploi" c'est un integer).

    EDIT: ce n'était pas ça... Je recommence.

    EDIT2: Cette fois-ci j'ai les descriptions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT t.description FROM Typeemploi t WHERE t.id IN (SELECT e.typeemploi FROM Emploipreference e)
    Chaque fois que tu dis "je ne peux pas", n'oublie pas d'ajouter le mot "encore".

Discussions similaires

  1. Aide sur une requete select
    Par iomega dans le forum Débuter
    Réponses: 4
    Dernier message: 04/02/2008, 15h03
  2. aide requete select d'une table dans une autre table
    Par alexkickstand dans le forum VBA Access
    Réponses: 1
    Dernier message: 24/10/2007, 22h09
  3. Aide pour une requete (SELECT)
    Par Space Cowboy dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/01/2007, 16h21
  4. Requete SELECT à l'aide d'un contenu partiel d'un champ
    Par wylls dans le forum Langage SQL
    Réponses: 11
    Dernier message: 04/12/2006, 11h33
  5. Aide pour une requete selection unique.
    Par mitchb dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/11/2006, 16h42

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