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 :

[Hibernate]Hibernate et collections


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut [Hibernate]Hibernate et collections
    Salut a tous !

    J'effectue une query en utilisant hibernate.
    D'apres ce que j'ai compris dans la doc (et peut etre que je me trompe) l'objet Query est une Collection de type List (arretez moi si je me trompe).

    C'est donc tout naturellement que j'avais pensé pouvoir faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Query query = hibSession.createQuery("from POJOAlertsHistory a where a.DeviceAddress = '"+deviceAddress+"'");
     
    //insert all the results into a collection that will be parsed later
    ArrayList alertsCollection = new ArrayList((ArrayList)query);
    Je pensais en effet pouvoir faire un Cast de cette query vers un ArrayList mais j'obtiens java.lang.ClassCastException: org.hibernate.impl.QueryImpl
    Ce cast m'aurais permi de dimensionner l'arraylist directement.

    Maintenant je suis obligé de faire un truc du genre :



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    //insert all the results into a collection that will be parsed later
          	ArrayList alertsCollection = new ArrayList();
     
          	for (Iterator it = query.iterate(); it.hasNext();) {
        		POJOAlertsHistory dbalert = (POJOAlertsHistory) it.next();
        		alertsCollection.add(dbalert); 
          	}
    Est-ce le seul moyen de passer cette query dans une collection pour pouvoir la retravailler avec une autre classe?
    Poeut-etre pouvez-vous me donner des exemples pour pouvoir passer cet query a d'autres classes qui ne conaissent pas forcément hibernate.

    Merci encore une fois pour votre aide précieuse
    A+
    [/b]

  2. #2
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Ta query renvoie un objet List (interface), plus exactement une implémentation de List. Cet objet List n'est donc pas une ArrayList et le cast ne peut donc pas marcher.
    Concernant, le reste de ton appli, pourquoi ne pas lui passer un objet List plutot qu'une ArrayList ? Il s'agit d'une bonne pratique (cf le livre du GoF sur les Designs Patterns à propos des interfaces, premier principe de base : Program to an interface, not an implementation)

    Si tu tiens vraiment à transformer ta List en ArrayList, il existe un constructeur qui prend un objet Collection en entrée (List est une Collection)

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    Merci pour ta réponse !

    Je me doutais que le ArrayList etait le problème.
    Je pensait toutefois qu'étant donné que ArrayList etait une implémentation de List le cast pourrai tse faire ...
    Aparemment pas.
    Je pense qu'une List simple fera l'affaire.

    Merci encore pour ton aide !

    Maintenant le tout est de savoir comment utiliser une List ....


    A+

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    75
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 75
    Points : 53
    Points
    53
    Par défaut
    REsalut

    Je rencontre toutefois un problème qui est plus de l'ordre de Java pur que de J2EE mais bref puisqu'on y est...

    Etant donné que List est une Interface je ne peux aps l'utiliser directement ...

    Je pensais faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List alertsCollection = new List(query);
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List alertsCollection = new List((List)query);
    Eclipse me donne le message suivant :

    Cannot instantiate the type List
    Dois-je faire ma propre implémentation de List ?


    Merci encore

  5. #5
    Membre averti
    Inscrit en
    Août 2005
    Messages
    352
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 352
    Points : 427
    Points
    427
    Par défaut
    Pourquoi veux tu utiliser une implémentation et ne pas travailler directement avec une interface ?
    List étant une interface, tu ne peux pas appeler un constructeur de List !?!
    Tu as déjà une List, utilise là. Si tu tiens vraiment à choisir une implémentation, utilise ce genre de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    List maListe = new ArrayList(resultatQuery);
    Mais je ne vois pas de justification pour ce bout de code.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    882
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2004
    Messages : 882
    Points : 948
    Points
    948
    Par défaut
    y a pas une erreur là???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList alertsCollection = new ArrayList((ArrayList)query);
    moi j'aurais fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList alertsCollection = (ArrayList)query.list();

    Sun Certified Business Component Developer
    Sun Certified Java Programmer
    --
    The definitive toolbox for GWT applications: gwt-toolbox
    My blog about Java and JEE: Benjamin's Blog

  7. #7
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Bonjour,

    Désolé de m'initier dans votre conversation mais je cherche depuis un moment a utiliser hibernate mais j'ai du mal a savoir qd mettre dans le hibernate.cfg.xml ... j'ai reussi a faire des essais en suivant le tuto avec HSQLBD mais la pour accèder à ma vrai BD (oracle 10) je suis un peu perdu ...

    Est ce que qq'1 pourrait m'aider svp ?

    par exemple le "SQL dialect" c'est quoi ? comment je sais ce que je dois mettre en fonction de ma BD ?

  8. #8
    Membre actif
    Inscrit en
    Mai 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mai 2005
    Messages : 217
    Points : 220
    Points
    220
    Par défaut
    Bon ... en fait je viens de trouver ... le dialect est différent selon les versions d'oracle !

    PS : pr ceux qui sont comme moi ... ne toucher pas au ligne de config qui vous semble ne servir a rien sous peine de faire planter le truc et deperdre bcp de tmp ...

  9. #9
    Membre régulier Avatar de rgomes
    Homme Profil pro
    IT Developer JAVA Senior
    Inscrit en
    Juin 2004
    Messages
    128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : IT Developer JAVA Senior
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2004
    Messages : 128
    Points : 76
    Points
    76
    Par défaut Un peu tard la réponse :)
    Il fallait utiliser un java.util.Set;
    Hibernate requiert que les champs contenant des collections persistantes soient déclarés comme des types d'interface
    http://www.hibernate.org/hib_docs/re...llections.html

    En espérant t'avoir malgré tout aidé ...

  10. #10
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 274
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 274
    Points : 4 141
    Points
    4 141
    Par défaut
    Je vois pas l'intérêt de déterrer un sujet vieux de 20 mois.
    Je pense que l'auteur du post a eu le temps de passer à autre chose

Discussions similaires

  1. [Hibernate 3] Les collections sont-elles toujours sauvegardées ?
    Par Giovanny Temgoua dans le forum Hibernate
    Réponses: 10
    Dernier message: 23/08/2007, 18h25
  2. Hibernate : charger une collection dynamiquement
    Par Tail dans le forum Hibernate
    Réponses: 4
    Dernier message: 04/08/2006, 09h35
  3. [hibernate]pb sauvegarde collection
    Par riben dans le forum Hibernate
    Réponses: 2
    Dernier message: 07/06/2006, 16h52
  4. [Hibernate] Hibernate DB de 200 Table relationnelle
    Par servlet1 dans le forum Hibernate
    Réponses: 3
    Dernier message: 11/03/2006, 18h27
  5. [Hibernate]hibernate
    Par loulouzip dans le forum Eclipse Java
    Réponses: 8
    Dernier message: 05/04/2005, 18h43

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