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 3] Mapper une jointure [Mapping]


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut [Hibernate 3] Mapper une jointure
    Bonjour, je dois intervenir de toute urgence pour faire fonctionner un petit outil en Hibernate 3. Je rencontre une exception pour faire la jointure de deux tables, sachant que je ne dois pas utiliser HQL.

    J'ai deux tables : PERPHY et DENOMPHY. La clé primaire de PERPHY est IDITIP, donc DENOMPHY a IDITIP pour clé étrangère. La relation entre ces deux tables est du many-to-one : une seule instance de PERPHY a au moins une instance de DENOMPHY

    Je voudrais simplement programmer en Java une simple jointure. En donnant cette clé IDITIP, je veux obtenir toutes les informations des deux tables. En outre, je voudrais modéliser la requête SQL suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select * from denomphy d, perphy p 
    where p.IDITIP = d.IDITIP
    Voici donc les fichiers pour le mapping, sachant que j'ai supprimé les balises property très nombreuses :

    Perphy.hbm.xml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping>
    	<class name="metier.Perphy" table="PERPHY">
    		<id name="IDITIP" column="IDITIP"/>
    		<property name="CDACTIF"/>
    ...
    	</class>
    </hibernate-mapping>
    Denomphy.hbm.xml
    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
     
    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    	"-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
    	"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
     
    <hibernate-mapping>
    	<class name="metier.Denomphy" table="DENOMPHY">
    		<id name="IDITIP" column="IDITIP"/>
    		<property name="NOSEQ"/>
     
    ...
    		<many-to-one name="FK_DPHY_PHY_IDITIP" column="IDITIP" not-null="true"/>
    	</class>
    </hibernate-mapping>


    Maintenant le problème, quand je lance le tout, j'ai droit à une exception :
    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
     
    Initial SessionFactory creation failed.org.hibernate.MappingException: Error reading resource: Denomphy.hbm.xml
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at HibernateUtil.<clinit>(HibernateUtil.java:20)
    	at Principale.chercheDenomPhy(Principale.java:31)
    	at Principale.main(Principale.java:22)
    Caused by: org.hibernate.MappingException: Error reading resource: Denomphy.hbm.xml
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:452)
    	at org.hibernate.cfg.Configuration.parseMappingElement(Configuration.java:1263)
    	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1235)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1217)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1184)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1112)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1098)
    	at HibernateUtil.<clinit>(HibernateUtil.java:16)
    	... 2 more
    Caused by: org.hibernate.PropertyNotFoundException: field not found: FK_DPHY_PHY_IDITIP
    	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:96)
    	at org.hibernate.property.DirectPropertyAccessor.getField(DirectPropertyAccessor.java:103)
    	at org.hibernate.property.DirectPropertyAccessor.getGetter(DirectPropertyAccessor.java:111)
    	at org.hibernate.util.ReflectHelper.getter(ReflectHelper.java:90)
    	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:78)
    	at org.hibernate.mapping.ToOne.setTypeUsingReflection(ToOne.java:57)
    	at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:1841)
    	at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:1827)
    	at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:1728)
    	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:318)
    	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:236)
    	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:152)
    	at org.hibernate.cfg.Configuration.add(Configuration.java:362)
    	at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:400)
    	at org.hibernate.cfg.Configuration.addResource(Configuration.java:449)
    	... 9 more
    En outre, il me dit qu'il ne sait pas ce qu'est FK_DPHY_PHY_IDITIP. Il s'agit dans le modèle de donnés du nom de la jointure entre les deux, a priori, ce n'est pas ce qu'il faut mettre...

    Quelqu'un pourrait-il me dépanner et me dire ce qu'il faut mettre à la place.

    Ensuite, comment dois-je coder ma jointure en Java ? J'ai bien les deux classes Java correspondantes, mais que faire ensuite ?

    Autant je fais du Struts, c'est ma première expérience en Hibernate...

    Merci par avance de votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2007
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2007
    Messages : 163
    Par défaut
    Ouf, j'ai trouvé !

    J'ai relu pendant la pause de midi la documentation, j'ai fini par comprendre mon erreur.

    Voilà ce qui n'allait pas dans le fichier DenomPhy.hbm.xml :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <many-to-one name="FK_DPHY_PHY_IDITIP" column="IDITIP" not-null="true"/>
    Après lecture de la documentation, je l'ai remplacé par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <many-to-one name="PERPHY" column="IDITIP" not-null="true" insert="false" update="false"/>
    Ensuite, la classe Java de Denomphy nécessite l'ajout de l'attribut PERPHY (attribut name) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private Perphy PERPHY;
    Et voilà... ce n'était pas plus bête que cela...

    Mais ça marche !

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

Discussions similaires

  1. [Hibernate Annotation] Mapper une classe abstraite
    Par DanZzz dans le forum Hibernate
    Réponses: 3
    Dernier message: 15/06/2006, 22h12
  2. [Hibernate] Mapper une table sans clé primaire
    Par neuromencien dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/06/2006, 17h05
  3. Réponses: 3
    Dernier message: 08/06/2006, 17h38
  4. [Hibernate] Mapper une classe association
    Par mauvais_karma dans le forum Hibernate
    Réponses: 16
    Dernier message: 25/01/2006, 12h34
  5. Réponses: 10
    Dernier message: 10/01/2006, 14h14

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