Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1771 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Hibernate] Erreur de mapping

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Hibernate] Erreur de mapping

n°1247069
Chronoklaz​m
Posté le 16-11-2005 à 19:53:25  profilanswer
 

Salut,      
 
    J'ai :
 
Une classe abstraite Article et une classe Stylo.
 
J'arrive a mettre des stylos dans ma base sans problemes :
 

Code :
  1. /* ... */
  2. Stylo s1 = new Stylo("s12", "Eine stylo bleuen", "Dushmoll", 12,"bleu" );
  3. m.saveStylo(s1);
  4. /* ... */
  5. public void saveStylo(Stylo s) throws HibernateException{
  6.     Session session = HibernateUtil.currentSession();
  7.     Transaction tx = session.beginTransaction();   
  8.    
  9.        session.save(s);     
  10.     tx.commit();
  11.     HibernateUtil.closeSession();   
  12. }


 
Mais j'ai une "org.hibernate.hql.ast.QuerySyntaxException: article is not mapped." quand j'essaye de
récuperer un stylo de la base :
 

Code :
  1. public void test()throws HibernateException{
  2.     Session session = HibernateUtil.currentSession();
  3.     Transaction tx = session.beginTransaction();           
  4.    
  5.     Query query = session.createQuery("select reference from article where reference = :ref" );
  6.     query.setString("ref", "s12" );
  7.     for (Iterator it = query.iterate(); it.hasNext();) {
  8.     Stylo stylo = (Stylo) it.next();
  9.     System.out.println(" : " + stylo.getDescriptif());
  10.     }   
  11.    
  12.     tx.commit();
  13.     HibernateUtil.closeSession();   
  14.     }


 
Je trouve paradoxal le fait qu'il sauvegarde sans souci et au chargement il me sort que article n'est pas mappé  : :heink:  
 
Voila le Article.hbm.xml :

Code :
  1. <hibernate-mapping>
  2.     <class name="fr.unice.toto.article.Article" table="article">
  3.         <!-- Primary Key : reference est une String ?????? -->
  4. <id name="reference" column="reference" type="java.lang.String">
  5.             <!-- Pour l'instant on met pas ... verra apres -->
  6.             <!-- <generator class="increment"/> -->
  7.         </id>
  8.         <!-- Pour differencier nos objets dans la table -->
  9.         <discriminator column="type_article" type="string"/>       
  10.         <!-- Les sous classes de Article -->
  11.        
  12.         <!-- La sous classe abstraite ArticleUnitaire -->               
  13.         <subclass name="fr.unice.toto.article.ArticleUnitaire">       
  14.          <property name="marque" column="marque"/>
  15.          <property name="pu" column="pu"/>       
  16.          <property name="descriptif" column="descriptif"/>       
  17.             <!-- La sous classe concrete Stylo -->
  18.             <subclass name="fr.unice.toto.article.Stylo">
  19.                 <property name="couleur" column="couleur"/>
  20.             </subclass>
  21.             <!-- La sous classe concrete Ramette -->
  22.             <subclass name="fr.unice.toto.article.Ramette">
  23.                 <property name="grammage" column="grammage"/>
  24.             </subclass>
  25.         </subclass>
  26.         <!-- La sous classe concrete Lot -->
  27.         <subclass name="fr.unice.toto.article.Lot">
  28.          <property name="nb" column="nb"/>
  29.          <property name="pourcentage" column="pourcentage"/>
  30.         </subclass>
  31.     </class>
  32. </hibernate-mapping>


 
Une idée svp ?


Message édité par Chronoklazm le 16-11-2005 à 19:58:22
mood
Publicité
Posté le 16-11-2005 à 19:53:25  profilanswer
 

n°1247084
the real m​oins moins
Posté le 16-11-2005 à 20:06:44  profilanswer
 

peut etre rien à voir mais pourquoi tu fais de l'hql pour des requetes comme ça au lieu d'utiliser le chouette package de query ? :/
 
(j'allais te suggerer de faire une requete avec, juste pour voir, par curiosité, des fois que ta requete serait mal foutue)
 
(et revise moi ton indentation sur ton xml, c'est du n'importe quoi :o)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247085
sebi
Posté le 16-11-2005 à 20:06:54  profilanswer
 

et avec une query plus dans le style hibernate du genre  : "from Article where reference = :ref"  (avec un grand A pour article), ca donne quoi ?

n°1247087
the real m​oins moins
Posté le 16-11-2005 à 20:07:44  profilanswer
 

from fr.unice.toto.article.Article, meme, non , d'ailleurs ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247088
Chronoklaz​m
Posté le 16-11-2005 à 20:08:08  profilanswer
 

Bon dsl je suis trop nase !
c'est ma requete qui pue  

Code :
  1. Query query = session.createQuery("select a from Article as a where a.reference = 's12'" );
  2.     for (Iterator it = query.iterate(); it.hasNext();) {
  3.     Stylo stylo = (Stylo) it.next();
  4.     System.out.println(" : " + stylo.getDescriptif());
  5.     }

n°1247090
sebi
Posté le 16-11-2005 à 20:08:38  profilanswer
 

ah ouais il a pas déclaré son package en début de son hbm

n°1247093
the real m​oins moins
Posté le 16-11-2005 à 20:10:43  profilanswer
 

tiens au fait, avec ce style de mapping, ta table elle ressemble à quoi ? plein de colonnes (in)utilisées en fonction du type ?  
 
et il stocke le type ou ?-->        <discriminator column="type_article" type="string"/>          :D
 
il y stocke quoi ? l'attribut type peut prendre quoi comme autres valeurs ??

Message cité 1 fois
Message édité par the real moins moins le 16-11-2005 à 20:11:45

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247095
Chronoklaz​m
Posté le 16-11-2005 à 20:12:09  profilanswer
 

the real moins moins a écrit :

from fr.unice.toto.article.Article, meme, non , d'ailleurs ?


 
 :jap:  
 
Et pour l'indentation ... ça me soule NetBeans ne la fait pas automatiquement le vilain chenapan.


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1247096
the real m​oins moins
Posté le 16-11-2005 à 20:13:14  profilanswer
 

si tu mets juste Article, ça marche aussi, meme sans declarer de package ? Par chance, ou parce qu'hibernate voit qu'il ne connait qu'une classe dont le short name est Article ?


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247099
the real m​oins moins
Posté le 16-11-2005 à 20:15:19  profilanswer
 

(n'empeche, je vote pour une query dans le style de

Criteria criteria = session.createCriteria(Article.class);
criteria.add(Expression.eq("ref", "s12" ).ignoreCase());
Stylo stylo = (Stylo) criteria.uniqueResult();


splu joli :D
(tu peux ptet meme faire createCriteria(Stylo.class)pour etre plus safe, au besoin)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
mood
Publicité
Posté le 16-11-2005 à 20:15:19  profilanswer
 

n°1247101
Chronoklaz​m
Posté le 16-11-2005 à 20:16:58  profilanswer
 

the real moins moins a écrit :

tiens au fait, avec ce style de mapping, ta table elle ressemble à quoi ? plein de colonnes (in)utilisées en fonction du type ?  
 
et il stocke le type ou ?-->        <discriminator column="type_article" type="string"/>          :D
 
il y stocke quoi ? l'attribut type peut prendre quoi comme autres valeurs ??


 
 
Bein c'est la strategie la moins prise de tête et celle ou l'on fait le moins de jointure ... bref la meilleure non ?
 
Et j'ai une colonne type_article pour diferencier les articles, c'est quoi le souci ?
 


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1247102
the real m​oins moins
Posté le 16-11-2005 à 20:19:09  profilanswer
 

ha mais y'a pas de souci, je demande, stoo ;)
j'ai jamais fait grand chose de super excitant avec hibernate, et notamment les mappings de sous-classes, jamais touché :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247103
Chronoklaz​m
Posté le 16-11-2005 à 20:20:03  profilanswer
 

theReal-- : Oui avec juste Article ça marche aussi. Pourquoi je sais pas ... ta theorie à l'air pas mal.
 
sebi : "ah ouais il a pas déclaré son package en début de son hbm"
 
En le mettant dans l'attribut name du tag "class", ça suffit pas ?

Message cité 1 fois
Message édité par Chronoklazm le 16-11-2005 à 20:21:42

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1247104
Chronoklaz​m
Posté le 16-11-2005 à 20:25:24  profilanswer
 

the real moins moins a écrit :

ha mais y'a pas de souci, je demande, stoo ;)
j'ai jamais fait grand chose de super excitant avec hibernate, et notamment les mappings de sous-classes, jamais touché :)


 
Y a trois possibilités :
 - 1 seule table pour toute la hierarchie d'heritage
 - 1 table par classe
 - 1 table par classe concrete  
 
La derniere est la plus intuitive mais la plus casse-guele aussi  :sarcastic:  
Et carrement méchante à mapper.
 
EDIT :  Et ce qui est bien pour la premiere strategie c'est qu'on est reduit à faire 1 seul hbm pour toute la hierarchie
et donc pas se tapper les fichiers de mapping pour chaque sous-classe.


Message édité par Chronoklazm le 16-11-2005 à 20:29:13

---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1247108
the real m​oins moins
Posté le 16-11-2005 à 20:27:46  profilanswer
 

et donc, tu m'as pas dit, dans type_article, hibernate stocke quoi ? :D
(et pourquoi sur <discrimator> y'a un attribut type? quel autre valeur que string sont possibles??)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247109
the real m​oins moins
Posté le 16-11-2005 à 20:28:03  profilanswer
 

(en meme temps, je pourrais aller lire la doc hein [:gilbert gosseyn])


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247110
Chronoklaz​m
Posté le 16-11-2005 à 20:31:23  profilanswer
 

le class.getName() je crois


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1247112
sebi
Posté le 16-11-2005 à 20:32:13  profilanswer
 

Chronoklazm a écrit :


 
sebi : "ah ouais il a pas déclaré son package en début de son hbm"
 
En le mettant dans l'attribut name du tag "class", ça suffit pas ?


 
 
<hibernate-mapping package="fr.unice.toto.article" >
comme ca tu as plus besoin de préfixer les autres classes à l'intérieur de ton mapping.

n°1247114
Chronoklaz​m
Posté le 16-11-2005 à 20:32:49  profilanswer
 

Ouais voila ...
 
Dans la BD ca donne :
 
type_article(varchar)  
fr.unice.toto.article.Stylo


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
n°1247116
the real m​oins moins
Posté le 16-11-2005 à 20:33:03  profilanswer
 

ok merci :)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1247117
Chronoklaz​m
Posté le 16-11-2005 à 20:33:53  profilanswer
 

sebi a écrit :

<hibernate-mapping package="fr.unice.toto.article" >
comme ca tu as plus besoin de préfixer les autres classes à l'intérieur de ton mapping.


 
dakhor  :jap:


---------------
Scheme is a programmable programming language ! I heard it through the grapevine !
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Hibernate] Erreur de mapping

 

Sujets relatifs
erreur à la compilationType de donnée ERREUR énorme!
Erreur quand il n'y pas d'ID en GETErreur "fonction" is multiply-defined...
Erreur ggc que je sais pas resoudreerreur sql
Erreur de test avec plus de 2 : $_FILESChamps de formulaire obligatoires : où est l'erreur ?
Erreur 500 sur 1and1Erreur flagrante? Serveur (sockets + threads)
Plus de sujets relatifs à : [Hibernate] Erreur de mapping


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR