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 :

Selectionner des colonnes d'un objet


Sujet :

Hibernate Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut Selectionner des colonnes d'un objet
    Bonjour,

    Je désire ne sélectionner que deux colonnes d'un objet.

    J'ai codé comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List<T> list = em.createQuery("select o.designation, o.id from " + entityType.getSimpleName() + " o", entityType).getResultList();
    Et j'ai eu l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    java.lang.IllegalArgumentException: Cannot create TypedQuery for query with more than one return using requested result type
    Donc, premièrement, je me demande déjà si la List dans laquelle je souhaite mettre le résultat peut gérer plusieurs types (j'aurais des String et des int).

    Ensuite, en recherchant sur le net, j'ai trouvé que l'EntityManager ne prendrait pas les types différents et ne prendrait que les objets ... je suis un peu étonné de lire cela sachant que c'est possible en SQL et je ne vois pas pourquoi les concepteurs d'Hibernate n'auraient pas codé le HQL pour nous perrmettre d'obtenir des colonnes de types différents ?

    OS : LinuxMint 20

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,
    Citation Envoyé par francky74 Voir le message
    Ensuite, en recherchant sur le net, j'ai trouvé que l'EntityManager ne prendrait pas les types différents et ne prendrait que les objets ... je suis un peu étonné de lire cela sachant que c'est possible en SQL et je ne vois pas pourquoi les concepteurs d'Hibernate n'auraient pas codé le HQL pour nous perrmettre d'obtenir des colonnes de types différents ?
    Ne pas confondre JPA et Hibernate. JPA est un interface (spécification) implémenté par divers framework (Hibernate, TopLink, EclipseLink, ...). Si tu utilises JPA, hibernate reste conforme aux spécifications de JPA, donc ne te permet pas ce genre de requête. Si tu utilises hibernate en natif, tu peux bien faire ce genre de requête.

    A+.

  3. #3
    Membre confirmé Avatar de freddou17
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2013
    Messages
    341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2013
    Messages : 341
    Points : 566
    Points
    566
    Par défaut
    Slt,

    Tu peux de créer un objet custom qui a comme attributs deux field de type Object ()Object columnOne... et utiliser les TypedQuery. Je ne suis pas sur que ça fonctionne du fait que les types soient Object mais je pense que ça se tente

    ++
    "Aucun de nous ne sait ce que nous savons tous, ensemble."
    Lien vers mon appli Funcash n'hésitez pas à donner votre avis

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2008
    Messages
    757
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2008
    Messages : 757
    Points : 572
    Points
    572
    Par défaut
    Bonjour,

    Ne pas confondre JPA et Hibernate
    En fait, je n'utilise pas JPA mais Hibernate. D'ailleurs, je ne comprends pas pourquoi vous me parlez de JPA ? Je ne l'ai jamais utilisé et j'ai peut-être écrit dans mon message quelques lignes qui font penser à JPA ?

    Si tu utilises hibernate en natif
    Que signifie "utiliser Hibernate en natif" ? je code une appli JEE, avec Hibernate qui me permet de requêter une base MariaDB. Je ne comprens pas ce que signifie natif.

    Tu peux de créer un objet custom qui a comme attributs deux field de type Object ()Object columnOne... et utiliser les TypedQuery. Je ne suis pas sur que ça fonctionne du fait que les types soient Object mais je pense que ça se tente
    Alors ça, j'y avais pensé. Ce seraient des sortes de beans en fait. Mais le problème est que cela me fait créer des classes supplémentaires et le code devient très lourd et indigeste.

    Pour l'instant, afin de contourner, j'ai simplement requêter les objets en entier, je les envoie en json et c'est le javascript qui affiche uniquement les champs désirés.

    Merci pour vos réponses !
    OS : LinuxMint 20

  5. #5
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par francky74 Voir le message
    En fait, je n'utilise pas JPA mais Hibernate. D'ailleurs, je ne comprends pas pourquoi vous me parlez de JPA ? Je ne l'ai jamais utilisé et j'ai peut-être écrit dans mon message quelques lignes qui font penser à JPA ?
    EntityManager, c'est du JPA. em n'est pas un EntityManager ici?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    em.createQuery("select o.designation, o.id from " + entityType.getSimpleName() + " o", entityType).getResultList();
    Citation Envoyé par francky74 Voir le message
    Que signifie "utiliser Hibernate en natif" ? je code une appli JEE, avec Hibernate qui me permet de requêter une base MariaDB. Je ne comprens pas ce que signifie natif.
    C'est d'utiliser hibernate sans vouloir l'implémentation de JPA.
    Citation Envoyé par francky74 Voir le message
    Alors ça, j'y avais pensé. Ce seraient des sortes de beans en fait. Mais le problème est que cela me fait créer des classes supplémentaires et le code devient très lourd et indigeste.

    Pour l'instant, afin de contourner, j'ai simplement requêter les objets en entier, je les envoie en json et c'est le javascript qui affiche uniquement les champs désirés.
    Effectivement tu peux faire ton besoin avec du JPA, ton erreur était de passer le mauvais type de classe en paramètre. Au lieu de retourner une liste de "entityType", tu dois retourner un List<Object[]>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    List<Object[]> list = em.createQuery("select o.designation, o.id from " + entityType.getSimpleName() + " o", Object[].class).getResultList();
    for (Object[] obj : list) {
          System.out.println("Designation: " + obj[0] + ", Id: " + obj[1]);
    }
    A+.

Discussions similaires

  1. Réponses: 4
    Dernier message: 28/05/2015, 18h19
  2. Créer des prompts pour selectionner des colonnes
    Par thtghgh dans le forum SAS Base
    Réponses: 4
    Dernier message: 10/12/2013, 13h37
  3. Réponses: 2
    Dernier message: 29/04/2010, 10h02
  4. Selectionner des colonnes dans une ligne pour le copier
    Par lilp1 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/05/2009, 17h00
  5. Selectionner des colonnes sur critère
    Par Mayhem555 dans le forum Langage SQL
    Réponses: 11
    Dernier message: 28/10/2008, 16h00

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