Précédent   Forum des professionnels en informatique > Java > Général Java > Persistance > JPA
JPA Forum d'entraide sur l'API de persistance JPA (Java Persistence API)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/12/2011, 11h17   #1
Membre à l'essai
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 21
Points : 21
Par défaut Récupérer les élément de toutes les colonnes d'une table en JPA

Bonjour,

J ai la fonction getResultList() qui retourne un tableau d'un résultat sql, genre:

Code :
1
2
3
 
Query query = entityManager.createNativeQuery("select a from table");
malist = query.getResultList();
ça me retourne la listes des éléments 'a'.

Moi je veux avoir le résultats d'une requête récupère plusieurs colonne et non seulement une.
Code :
select a, b,c from maTable
comment faire ?
merci pour l'aide
death_style est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 16/12/2011, 13h49   #2
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 063
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 063
Points : 5 654
Points : 5 654
comme tu as noté
Code :
1
2
 
select colonne1, colonne2, colonne3 from table
Au retour, tu as une liste de tableau d'Object à traiter où tbl[0] correspondra à colonne1, tbl[1] à colonne2 etc...
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 15h11   #3
Expert Confirmé
 
Homme
Ingénieur développement logiciels
Inscription : juin 2007
Messages : 2 258
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : juin 2007
Messages : 2 258
Points : 2 578
Points : 2 578
On peut savoir pourquoi tu fais une nativeQuery? plutot qu'une requete HQL?
DevServlet est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 15h58   #4
Membre à l'essai
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 21
Points : 21
Citation:
Au retour, tu as une liste de tableau d'Object à traiter où tbl[0] correspondra à colonne1, tbl[1] à colonne2 etc...
je vais voir ça merci

Citation:
On peut savoir pourquoi tu fais une nativeQuery? plutot qu'une requete HQL?
Je veux en profiter de certaines fonctions sql sur les attributs. plutôt que de créer les objets les parcourir et faire le traitement en java.
death_style est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/12/2011, 17h14   #5
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 063
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 063
Points : 5 654
Points : 5 654
Citation:
Envoyé par DevServlet Voir le message
On peut savoir pourquoi tu fais une nativeQuery? plutot qu'une requete HQL?
Dans beaucoup de cas, lorsqu'il s'agit de recherche d'informations (filtrage, etc) les requêtes natives sont plus performantes (choix de chemin d'accès).
Pour ce qui est du modèle "métier", ma préférence va bien sûr aux entity
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 18h02   #6
Membre à l'essai
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 21
Points : 21
Citation:
Envoyé par OButterlin Voir le message
comme tu as noté
Code :
1
2
 
select colonne1, colonne2, colonne3 from table
Au retour, tu as une liste de tableau d'Object à traiter où tbl[0] correspondra à colonne1, tbl[1] à colonne2 etc...
Je peu pas faire ça , le getResultList retourne une List et non un tableau. donc je ne peux pas faire un truc tb1[0] ....
death_style est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/12/2011, 21h22   #7
Membre habitué
 
Avatar de geforce
 
Femme
Développeur informatique
Inscription : janvier 2010
Messages : 468
Détails du profil
Informations personnelles :
Sexe : Femme

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

Informations forums :
Inscription : janvier 2010
Messages : 468
Points : 149
Points : 149
Envoyer un message via Skype™ à geforce
pour quoi pas plus tôt ça:

Code :
1
2
3
4
5
6
7
8
9
10
       public List<Type> findAll() {
        try {
            CriteriaQuery cq = getEntityManager().getCriteriaBuilder().createQuery();
            cq.select(cq.from(entityClass));
            return getEntityManager().createQuery(cq).getResultList();
        } catch (Exception ex) {
            getLogger().log(Level.INFO, "Exception lors de l''appel au service " + entityClass + "Impl.findAll {0}", ex.getStackTrace());
            return null;
        }
    }
le reste ces du java et la gestion des liste dans des boucle
geforce est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/12/2011, 08h58   #8
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 063
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 063
Points : 5 654
Points : 5 654
Citation:
Envoyé par death_style Voir le message
Je peu pas faire ça , le getResultList retourne une List et non un tableau. donc je ne peux pas faire un truc tb1[0] ....
je fais ça à longueur de temps, je peux t'assurer que ça fonctionne.
le getResultList() te renvoie une List<Object[]>
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 08h59   #9
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 063
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 063
Points : 5 654
Points : 5 654
Citation:
Envoyé par geforce Voir le message
pour quoi pas plus tôt ça:

Code :
1
2
3
4
5
6
7
8
    public Type find(Object id) {
        try {
            return getEntityManager().find(entityClass, id);
        } catch (Exception ex) {
            getLogger().log(Level.INFO, "Exception lors de l''appel au service " + entityClass + "Impl.find {0}", ex.getStackTrace());
            return null;
        }
    }
le reste ces du java et la gestion des liste dans des boucle
Un find te renvoie une instance d'une entité, pas une liste (correspondant par exemple à des critères de sélection)
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 09h23   #10
Modérateur
 
Inscription : août 2006
Messages : 2 848
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 2 848
Points : 2 950
Points : 2 950
Citation:
Dans beaucoup de cas, lorsqu'il s'agit de recherche d'informations (filtrage, etc) les requêtes natives sont plus performantes (choix de chemin d'accès).
Pour ce qui est du modèle "métier", ma préférence va bien sûr aux entity
C'est éventuellement plus rapide si on se sert de fonctionnalités particulières à la base de données, comme le choix d'index particulier.
Si c'est juste pour faire un select a from b, ça n'a pas trop d'intérêt à mon sens.
fr1man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 09h48   #11
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 063
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 063
Points : 5 654
Points : 5 654
Citation:
Envoyé par fr1man Voir le message
Si c'est juste pour faire un select a from b, ça n'a pas trop d'intérêt à mon sens.
Même pour un simple select ça peut avoir du sens si la table à beaucoup de colonnes et/ou une taille d'enregistrement élevée.
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/12/2011, 10h04   #12
Modérateur
 
Inscription : août 2006
Messages : 2 848
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 2 848
Points : 2 950
Points : 2 950
Effectivement, mais dans ce cas, on est dans un cas particulier.
fr1man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 10h12   #13
Modérateur
 
Avatar de OButterlin
 
Homme
Inscription : novembre 2006
Messages : 5 063
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : novembre 2006
Messages : 5 063
Points : 5 654
Points : 5 654
pas tant que ça...
Dans le cadre de recherches, pourquoi s'embarrasser à extraire des colonnes dont on n'a pas besoin dans les vues (au sens IHM)...
Sans compter que des jointures judicieuses peuvent booster les requêtes.
OButterlin est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/12/2011, 11h26   #14
Modérateur
 
Inscription : août 2006
Messages : 2 848
Détails du profil
Informations forums :
Inscription : août 2006
Messages : 2 848
Points : 2 950
Points : 2 950
Tout ça est faisable sans passer par du SQL pur.
fr1man est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/12/2011, 13h13   #15
Membre à l'essai
 
Inscription : novembre 2007
Messages : 115
Détails du profil
Informations forums :
Inscription : novembre 2007
Messages : 115
Points : 21
Points : 21
Merci pour vos réponse,
ça marche nikel bien avec ça :

Code :
1
2
3
4
5
6
7
8
9
 
List<Object[]> list = query.getResultList(sql);
 
for (Object[] object : list) {
 
      for (int i = 0; i < object.length; i++) {
                System.out.println( object[i].toString());
      }
}
merci OButterlin

Sinon, mon avis sur le sujet , personnellement , je trouve que dans certain cas, (parfois nombreux faut l'avouer ) l sql ordinaire et de loin meilleur qu'un traitement sur les objets en java. (traitement sur les Dates, les jointure les GROUP BY et surtout les COUNT.
death_style est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h44.


 
 
 
 
Partenaires

Hébergement Web