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 :

insertion dans un tree d'un objet genere par hibernate


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 43
    Points
    43
    Par défaut insertion dans un tree d'un objet genere par hibernate
    bonjour,
    mon probleme est le suivant: j'ai deux tables liees par une relation 1-N. donc dans la premiere table j'ai un attribut de type Tree<table2>.
    le probleme est que quand je veux remplir ce tree par une boucle ca me genere une exception des le deuxieme element. l'exception est la suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    java.lang.ClassCastException: com.proxymit.ihmedb.mapping.Promptlist
    	at java.util.TreeMap.compare(TreeMap.java:1093)
    	at java.util.TreeMap.put(TreeMap.java:465)
    	at java.util.TreeSet.add(TreeSet.java:210)
    	at com.proxymit.ihmedb.mapping.base.BaseService.addToPromptlists(BaseService.java:210)
    	at com.proxymit.ihmedb.ui.struts.action.NouveauServiceAction.execute(NouveauServiceAction.java:95)
    	at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
    	at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
    	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)
    	at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:709)
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:214)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:198)
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:152)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:102)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    	at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:104)
    	at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520)
    	at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929)
    	at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160)
    	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799)
    	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:705)
    	at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577)
    	at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
    	at java.lang.Thread.run(Thread.java:595)
    j'ai pensé qu'il faut implementer un comparateur mais je ne sais pas où je dois l'implementer ni meme si cette solution est correcte.
    comment je dois faire ?
    merci

  2. #2
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Ta classe PromptList elle hérite de quoi?

    Est tu sur que le treeMap est bien adapté? Pourquoi ne pas prendre un Set pour les listes comme montré dans les tutoriaux?
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  3. #3
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    la classe PromptListe est en realité une table dans ma base de données. Elle a ete generee automatiquement par hibernate. et pour j'ai pas un treeMap mais j'ai un Set qui est aussi generé par Hibernate a partir des fichiers de configuration nom_table.hbm.xml

    a ce propos j'ai une autre question : dans ces fichiers (nom_table.hbm.xml)
    j'ai vu qu'il y a ce bout de code qui me permet de generer les Set
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <set name="Promptlists" inverse="true" lazy="true" >
    			<key column="idService"/>
    			<one-to-many class="Promptlist"/>
    		</set>
    le tag <set> possede un attribut sort qui peut prendre une des valeurs suivantes: unsorted, natural ou une classe java. qu'est ce que natural ?

  4. #4
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    je ne suis pas sur mais je pense que natural devrait etre soit lordre dans lequel il les recupere soit l'ordre croissant. A voir une des 2 solutions.

    Tu ne ma pas plus avancé sur ton probleme. En tout cas tu essaye de faire un cast qu'il n'aime pas. Donc essaye de debugguer pour voir de quel type est ton objet que tu recupere avant de le caster.
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  5. #5
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    Pour plus de clareté voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for(int i= 0;i<listeprompt.length;i++)
    			{
    				nom=listeprompt[i].split("/")[0];
    				valeur=listeprompt[i].split("/")[1];
    				Promptlist promptlist= new Promptlist();
    				promptlist.setPromptName(nom);
    				promptlist.setCmsIdSeq(valeur);
    				service.addToPromptlists(promptlist);	
    			}
    listeprompt est un String[].
    pour ta question "promptlist" est de type Promptlist que je veux ajouter a un Set grace a la methode addToPromptlists. cette classe contient les attributs que j'ai dans la table Promptlist
    et "service" est de type Service qui contient aussi les attributs que j'ai dans ma table service.

    d'apres ce que j'ai compris l'exception est lancée parce qu'il n'y a pas de comparateur lors de l'ajout dans le Set or ce comparateur est indispensable pour ne pas ajouter un element existant (d'apres ce que j'ai lu dans des docs)

  6. #6
    Membre expérimenté Avatar de maxf1
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 229
    Points : 1 371
    Points
    1 371
    Par défaut
    Je ne sais pas si ca va resoudre totalement le probleme mais as tu implementer les methodes : equals() et hashCode()
    Sur ton type PromptList
    Une solution a été apporté pour résoudre votre problème alors vous aussi faites en profitez les autres grâce au tag qui se trouve tout en bas de la page....

    Merci de ne pas utiliser les messages privés pour un problème sauf si je vous l'ai explicitement demandé.

    -- Maxf1 --

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    salut,
    Je pense que si tu n'as pas envie de définir un comparateur, tu devrais plutot utiliser un HashSet au lieu d'un TreeSet, parce qu'un TreeSet est ordonné et pour cela il a besoin de comparer les objets pour savoir lequel vient avant l'autre. Cela explique pourquoi le premier élément ajouté à la liste ne pose pas de problème, mais dès lors que tu ajoutes le deuxième, il essaie de le comparer avec le premier, et comme très certainement tes objets n'implémentent pas Comparable, il émet un ClassCastException.
    SCJP 5 / SCBCD 1.3 Certified

  8. #8
    Membre du Club
    Inscrit en
    Mars 2006
    Messages
    45
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2006
    Messages : 45
    Points : 43
    Points
    43
    Par défaut
    merci pour ton aide mais j'ai trouvé une autre solution :
    je dois juste changer dans mon fichier hbm.xml <set> par <list>
    et le tour est joué

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2011, 16h50
  2. Insertion dans un arbre binaire Rouge-Noir (Red-Black Tree)
    Par monsieurouxx dans le forum Algorithmes et structures de données
    Réponses: 14
    Dernier message: 25/06/2010, 18h29
  3. insertion dans X-Tree
    Par amira88 dans le forum Algorithmes et structures de données
    Réponses: 0
    Dernier message: 31/12/2009, 10h11
  4. insertion dans une table objet 'oracle' ?
    Par ra'uf dans le forum SQL
    Réponses: 3
    Dernier message: 21/05/2009, 22h05
  5. Réponses: 3
    Dernier message: 19/11/2004, 21h48

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