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 :

Table dont la clé primaire est composée


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 Table dont la clé primaire est composée
    Bonjour à tous,

    Je reviens encore sur un problème que je rencontre avec Hibernate. Lors de la création de mon application et de la configuration d'Hibernate, celui-ci m'a fabriqué tous les objets et mapping des mes tables contenant une clé primaire classique, SAUF QUE, je dispose d'une table dont la clé primaire est composée de deux clés étrangères.

    J'ai trouvé quelques tuto, mais toujours pas de résultat, voici ce que j'ai fait :

    1.J'ai crée une classe JAVA tel que Hibernate l'a fait automatiquement mais pour ma table dont la clé primaire est composée :

    2. J'ai créé un fichier MaTAble.hbm.xml en écrivant à la main les propriétés du mapping :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
      <class name="domaine.Technicien" table="competencev2" catalog="comptechv2">
          <composite-id name="id" class="CompetenceId">
              <key-property name="id_technicien"/>
              <key-property name="id_technique"/>
          </composite-id>
     
          <property name="note" type="string">
              <column name="note" not-null="true"/>
          </property>
     
          <many-to-one name="id_ft">
              <column name="id_technicien"/>
          </many-to-one>
     
          <many-to-one name="id_technique">
              <column name="id_technique"/>
          </many-to-one>
     
      </class>
     
    </hibernate-mapping>
    3.J'ai renseigné le fichier de configuration de Hibernate hibernate.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
    25
    26
    27
    28
    29
    30
    31
    32
     
    <?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>
        <!--    Affiches les logs sql-->
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
        <property name="use_sql_comments">true</property>
        <property name="hibernate.current_session_context_class">thread</property>
        <property name="hibernate.query.factory_class">org.hibernate.hql.classic.ClassicQueryTranslatorFactory</property>
        <!-- JDBC connection pool (use the built-in) -->
        <property name="connection.pool_size">1</property>
        <!--    Mapping-->
        <property name="hibernate.hbm2ddl.auto">create</property>
        <!--    Fichier à mapper-->
        <!--    <mapping class="domaine/Competencev2"/>-->
        <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 resource="domaine/Competencev2.hbm.xml"/>
      </session-factory>
    </hibernate-configuration>
    J'utilise Netbeans 7.1 comme IDE, est-il possible de configurer automatiquement le mapping de cette table ? (JPA Controler Classes From Entity Classes) ?

    Merci d'avance

  2. #2
    Membre émérite
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 328
    Par défaut
    Salut,

    n'as tu pas oublié d'écrire la classe CompetenceId ?

    Si c'est fait, donne aussi le code des classes CompetenceId et Technicien.

    Et aussi donne nous la log quand tu compiles, surtout si ça plante

  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
    Salut,

    Merci de ta réponse, je t'invite à consulter cette conversation que j'ai crée :
    http://www.developpez.net/forums/d12...ping-jpa-j2ee/

    Post #14, tout est expliqué.

    Au niveau des logs, hibernate m'indique qu'il n'arrive pas à atteindre la table competencev2.

    Qu'en dis tu ?

    Merci
    Fred

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    J'en reviens à ce que je t'avais dit sur les annotations...
    Tu as mis à la fois @EmbeddedId et @Embeddable alors que la doc précise que c'est l'un ou l'autre ...

  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
    Salut,

    J'ai bien noté ta remarque chtig, mais par quoi le remplacer ?
    Modifier @EmbeddedId par @Id ?

    Merci

  6. #6
    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
    Voici un exemple de log que j'obtiens en lançant un "From Technicien" :
    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
     
    org.hibernate.MappingException: class CompetenceId not found while looking for property: id_technicien
    	at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:74)
    	at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:276)
    	at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:2174)
    	at org.hibernate.cfg.HbmBinder.bindComponent(HbmBinder.java:1903)
    	at org.hibernate.cfg.HbmBinder.bindCompositeId(HbmBinder.java:1726)
    	at org.hibernate.cfg.HbmBinder.bindCompositeId(HbmBinder.java:424)
    	at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:338)
    	at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:273)
    	at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:144)
    	at org.hibernate.cfg.Configuration.add(Configuration.java:669)
    	at org.hibernate.cfg.AnnotationConfiguration.processArtifactsOfType(AnnotationConfiguration.java:519)
    	at org.hibernate.cfg.AnnotationConfiguration.secondPassCompile(AnnotationConfiguration.java:286)
    	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1286)
    	at org.hibernate.cfg.AnnotationConfiguration.buildSessionFactory(AnnotationConfiguration.java:859)
    Caused by: java.lang.ClassNotFoundException: Will not load classes from default package (CompetenceId)
    	at org.netbeans.ProxyClassLoader.loadClass(ProxyClassLoader.java:199)
    	at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    	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.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:70)
    	... 16 more
    Un point me dérange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Caused by: java.lang.ClassNotFoundException: Will not load classes from default package (CompetenceId)
    Sachant que cette classe CompetenceId ne se trouve pas dans le "default package"

    Merci

Discussions similaires

  1. [SQL 2008]:Requete SELECT sur table dont le nom n'est pas figé
    Par jaskoula1979 dans le forum Développement
    Réponses: 3
    Dernier message: 19/10/2011, 18h50
  2. Réponses: 9
    Dernier message: 16/11/2010, 16h58
  3. Réponses: 1
    Dernier message: 12/05/2009, 11h05
  4. Réponses: 2
    Dernier message: 18/12/2008, 16h24
  5. [MySQL] Créer une table dont la 1ere colonne est la recopie de celle d'une autre table
    Par Richard Trigaux dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/11/2007, 12h56

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