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 :

Lien Many-To-Many


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 116
    Par défaut Lien Many-To-Many
    Bonjour,

    Je rencontre actuellement un problème avec Hibernate, il s'agit pour moi d'atteindre une classe sans clé primaire, je m'explique,

    J'ai une classe "Technicien" :
    - id_technicien (clé primaire)
    - nom
    - prenom
    - ....

    J'ai une classe "Technique" :
    - id_technique (clé primaire)
    - nom_technique
    -...

    Et, j'ai une classe "Competence" :
    - id_technicien (clé étrangère)
    - id_technique (clé étrangère)
    - note

    Lors de la configuration d'Hibernate, ma classe "Competence" n'est pas apparue (j'utilise Netbeans 7.1 comme IDE).

    J'ai parcouru quelques tutoriels parlant du Many-To-Many, mais je ne suis pas sûr de partir dans la bonne direction, et également pas certain que ce soit la solution la plus simple ?

    Que pouvez-vous me dire à ce sujet ?

    D'avance merci pour votre aide.

  2. #2
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    et pourtant c'est bien ManyToMany la BONNE solution.
    Ta classe compétence disparait au profit de "List" dans chacune de tes entités.
    Ensuite en base de données, il y aura biensûr une table de jointure.

    Petit exemple :
    http://www.mkyong.com/hibernate/hibe...le-annotation/

    ici tu as la doc officielle pour faire une many-to-many Bidirectionnelle :
    http://docs.jboss.org/hibernate/core...ional-join-m2m

  3. #3
    Membre confirmé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 116
    Par défaut
    Merci fxrobin pour ta rapidité.
    Dans mon message j'ai fait une erreur, dans ma table "Technicien" la clé primaire se nomme "id_ft", et du coup dans le table "Competence", la clé étrangère associée se nomme "id_technicien", dois-je m'attendre à de futurs problèmes ?

    Merci

  4. #4
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    non, car tu as un contrôle total sur le nom des champs, même des clés étrangères de tables de jointures.

  5. #5
    Membre confirmé
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Janvier 2012
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Janvier 2012
    Messages : 116
    Par défaut
    Merci de ta réponse,

    Je viens de terminer le tuto que tu m'as indiqué, mais des erreurs sortent :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    Test du Many to Many
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.annotations.Version <clinit>
    Infos: Hibernate Annotations 3.3.1.GA
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Environment <clinit>
    Infos: Hibernate 3.2.5
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Environment <clinit>
    Infos: hibernate.properties not found
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Environment buildBytecodeProvider
    Infos: Bytecode provider name : cglib
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Environment <clinit>
    Infos: using JDK 1.4 java.sql.Timestamp handling
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration configure
    Infos: configuring from resource: /hibernate.cfg.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration getConfigurationInputStream
    Infos: Configuration resource: /hibernate.cfg.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Famille.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Responsable.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Localisation.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Technique.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Technicien.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Domaine.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Droit.hbm.xml
    nov. 08, 2012 1:28:40 PM org.hibernate.cfg.Configuration addResource
    Infos: Reading mappings from resource : domaine/Produit.hbm.xml
    Initial SessionFactory creation failed.org.hibernate.MappingException: Unable to load class declared as <mapping class="domaine/Technicien"/> in the configuration:
    Exception in thread "main" java.lang.ExceptionInInitializerError
    	at domaine.HibernateUtil.<clinit>(HibernateUtil.java:28)
    	at Main.main(Main.java:23)
    Caused by: org.hibernate.MappingException: Unable to load class declared as <mapping class="domaine/Technicien"/> in the configuration:
    	at org.hibernate.cfg.AnnotationConfiguration.parseMappingElement(AnnotationConfiguration.java:638)
    	at org.hibernate.cfg.Configuration.parseSessionFactory(Configuration.java:1555)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1534)
    	at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:1002)
    	at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:69)
    	at org.hibernate.cfg.Configuration.doConfigure(Configuration.java:1508)
    	at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:990)
    	at org.hibernate.cfg.AnnotationConfiguration.doConfigure(AnnotationConfiguration.java:69)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1428)
    	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:972)
    	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:69)
    	at org.hibernate.cfg.Configuration.configure(Configuration.java:1414)
    	at org.hibernate.cfg.AnnotationConfiguration.configure(AnnotationConfiguration.java:966)
    	at domaine.HibernateUtil.<clinit>(HibernateUtil.java:24)
    	... 1 more
    Caused by: java.lang.ClassNotFoundException: domaine/Technicien
    	at java.lang.Class.forName0(Native Method)
    	at java.lang.Class.forName(Class.java:186)
    	at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:100)
    	at org.hibernate.cfg.AnnotationConfiguration.parseMappingElement(AnnotationConfiguration.java:635)
    	... 14 more
    Java Result: 1
    J'ai réaliser une classe "Main.java" en guise de classe test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public class Main {
     
        public static void main(String[] args) {
            System.out.println("Test du Many to Many");
            Session session = HibernateUtil.getSessionFactory().openSession();
            session.beginTransaction();
        }
    }
    Je sais la classe n'est pas complète, mais je procède par étape, hors ici ça bloque ?

    Une idée ?

    Visiblement il ne trouve pas ma classe, pourtant, elles sont bien déclarées :

    Fichier hibernat.cfg.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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
      <session-factory>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/comptechv2</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
        <mapping resource="domaine/Famille.hbm.xml"/>
        <mapping resource="domaine/Responsable.hbm.xml"/>
        <mapping resource="domaine/Localisation.hbm.xml"/>
        <mapping resource="domaine/Technique.hbm.xml"/>
        <mapping resource="domaine/Technicien.hbm.xml"/>
        <mapping resource="domaine/Domaine.hbm.xml"/>
        <mapping resource="domaine/Droit.hbm.xml"/>
        <mapping resource="domaine/Produit.hbm.xml"/>
        <mapping class="domaine/Technicien"/>
        <mapping class="domaine/Technique"/>
      </session-factory>
    </hibernate-configuration>
    Merci

  6. #6
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    la raison est là dans ta stacktrace :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Caused by: java.lang.ClassNotFoundException: domaine/Technicien
    Ta classe est bien dans le package "domaine" ?
    Elle est bien "publique" ?
    Constructeur vide public (ça c'est pour la suite).

    Montre ta classe Technicien

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Attention, si dans ta classe Competence, tu veux d'autres attributs que les clés étrangères, un many-to-many ne sera pas suffisant.

  8. #8
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Attention, si dans ta classe Competence, tu veux d'autres attributs que les clés étrangères, un many-to-many ne sera pas suffisant.
    bienvu, je n'avais pas vu qu'il y avait "note" en attribut ...

    dans ces cas là c'est du

    many-to-one entre "Technicien" et "NoteCompetence"
    many-to-one entre "Competence" et "NoteCompetence"

    one-to-many entre "NoteCompetence" et "Technicien"
    one-to-many entre "NoteCompetence" et "Competence"

    Il te faut donc une classe "NoteCompetence"

    Pense "graphe d'objets" avant de penser "persistance".

    A+

Discussions similaires

  1. [Core] Many-to-many uni-directionnelle - table lien jamais remplie
    Par l'Ermite Misanthrope dans le forum Hibernate
    Réponses: 7
    Dernier message: 24/04/2015, 08h26
  2. Réponses: 14
    Dernier message: 22/03/2011, 15h01
  3. Un peu de mal a comprendre le concepte "one-to-many" et "many-to-many"
    Par chriscoolletoubibe dans le forum Hibernate
    Réponses: 4
    Dernier message: 29/03/2007, 18h50
  4. [EJB2.1 Entity] [XDoclet][JBoss] CMR - Many to Many Relation
    Par dauggui dans le forum Java EE
    Réponses: 4
    Dernier message: 24/04/2006, 11h45
  5. [hibernate]relation many-to-many
    Par quilo dans le forum Hibernate
    Réponses: 5
    Dernier message: 20/12/2005, 10h07

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