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 :

Aide sur la manipulation des données retournées par createSQLQuery


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Points : 5
    Points
    5
    Par défaut Aide sur la manipulation des données retournées par createSQLQuery
    Bonjour,
    Il faut que je récupère les données de plusieurs tables liées, depuis une requête SQL native, donc j'ai utilisé la méthode createSQLQuery. Elle retourne une liste des objets.

    String str = "select numero_devis as \"Numéro devis\", c.reference as \"Numero de contrat\", date_souscription as \"Date de souscription\", Date_devis as \"Date devis\", cad.reference as \" Numero de commande\", type as \"Type du produit\""+
    " from persistent_object po, contrat c, contrat_assurance ca , caddie cad where"+
    " po.id= c.id and po.historic_end_date is null and c.id=ca.id and c.caddie_fk=cad.id and Date_devis < '30/04/2008' and Date_devis > '20/04/2008' and type in ('DECES')";

    List lst = session.createSQLQuery(str).list();
    le problème est comment récuperer ou afficher les colonnes de cette requête ?
    Merci pour votre aide

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Salut,

    Tu récupères un objet de type List<Object[]> ou chaque élément du tableau correspond à chaque colonne sélectionnée dans ta requête et ou chaque élément de la liste correspond à chaque ligne de réponse de ta requête.

    T'as plusieurs solutions pour récupérer le résultat.
    Tu peux faire ça (j'ai pas mis tous les champs, tu peux suivre le même principe pour les autres champs):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Query query = session.createSQLQuery(sql)
                                  .addScalar("Numero devis",Hibernate.LONG).
                                  .addScalar("Numero de contrat",Hibernate.LONG);
     
    List<Double[]> rows= (List<Double[]>) query.list(); 
     
    // ici tu traites chaque ligne de réponse de la requête
    for (Double[] row : rows){
                System.out.println("Numero devis  " + row [0]);
                System.out.println("Numero de contrat " + row [1]);
    }
    L'ordre des éléments dans le tableau correspond bien sur à l'ordre des champs de retour dans ta clause select.
    Ils flottent tous en bas

  3. #3
    Futur Membre du Club
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Points : 5
    Points
    5
    Par défaut
    Merci pour votre réponce

    J'ai suivi vos instructions mais malheureusement j'ai une erreur :

    Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to java.lang.String
    voici la classe de test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    Query lst = session.createSQLQuery("select * from contrat limit 2")
    									.addScalar("numero_devis",Hibernate.STRING)
    									.addScalar("reference", Hibernate.STRING);
    List<String[]> rows= (List<String[]>) lst.list();
     
    for (String[] row : rows){
        System.out.println("Numero devis  " + row[0]);
    }

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    476
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 476
    Points : 595
    Points
    595
    Par défaut
    Salut,

    C'est normal si dans les champs que tu sélectionnes, tu n'as pas que des chaines.

    Essaye avec 2 colonnes de type Chaine et des Objects[], ca devrait passer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Query query= session.createSQLQuery("select numero_devis, reference from contrat limit 2")
    .addScalar("numero_devis",Hibernate.STRING)
    .addScalar("reference", Hibernate.STRING);
    List<Object[]> rows= (List<Object[]>) query.list();
     
    for (Object[] row : rows){
    System.out.print("ligne de résultat=");
    System.out.print("Numero devis " + row[0]);
    System.out.println(" reference  " + row[1]);
     
    }
    Ils flottent tous en bas

Discussions similaires

  1. Récupération des données retournées par une requête
    Par fou-jea dans le forum Développement Web en Java
    Réponses: 0
    Dernier message: 06/09/2012, 16h28
  2. Réponses: 1
    Dernier message: 20/04/2011, 14h36
  3. Réponses: 10
    Dernier message: 10/05/2010, 21h59
  4. interprétation des données retournées par leastsq
    Par yonsi dans le forum Calcul scientifique
    Réponses: 0
    Dernier message: 08/06/2009, 19h59
  5. Réponses: 2
    Dernier message: 31/05/2007, 10h57

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