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 :

many-to-one sans clé primaire


Sujet :

Hibernate Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut many-to-one sans clé primaire
    Bonjour à tous,

    voici ma devinette du jour : j'ai deux tables Contact et Relation ayant donné naissance à deux classes du même nom. Deux contacts peuvent être liés par une relation, un contact peut avoir un ensemble de relations.

    La table Relation a la tête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    relation (
     idRelation : String PK,
     idApp : integer,
     idPere : integer,
     idFils : integer)
    La table Contact quant à elle, ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    contact (
     idApp : integer PK,
     email : string PK,
     idContact : integer)
    Les champs idPere et idFils de la table Relation correspondent au champ idContact de la table Contact. Comme on peut le constater, ces deux clés étrangères ne pointent pas sur la clé primaire de la table Contact

    Comment puis-je mapper cette association sous Hibernate, de idPere vers idContact et de idFils vers idContact dans un premier temps, et si possible en ajoutant la relation idApp-idApp par la suite ?

    J'ai déjà essayer les mappings suivants :

    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
     
    <class name="Contact" table="contact">
     
         <composite-id>
              <key-property name="idApp" column="idApp" type="integer" />
              <key-property name="email" column="mail" type="string" />
         </composite-id>
     
         <property name="idContact" column="idContact" type="integer" not-null="true" />
     
         <set name="relationsFils" cascade="all-delete-orphan" inverse="true" lazy="true">
              <key column="idContact" not-null="true" />
              <one-to-many class="Relation" />
         </set>
     
         <set name="relationsPeres" cascade="all-delete-orphan" inverse="true" lazy="true">
              <key column="idContact" not-null="true" />
              <one-to-many class="Relation" />
         </set>
    </class>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <class name="Relation" table="relation">
         <id name="idRelation" column="idRelation" type="string" />
     
         <property name="idFils" column="idFils" type="integer" not-null="true" />
     
         <property name="idPere" column="idPere" type="integer" not-null="true" />
     
         <property name="idApp" column="idApp" type="integer" not-null="true" />
     
         <many-to-one name="pere" cascade="all" column="idPere" property-ref="idContact" lazy="no-proxy" not-null="true" class="Contact" />
     
         <many-to-one name="fils" cascade="all" column="idFils" property-ref="idContact" lazy="no-proxy" not-null="true" class="Contact" />
    </class>
    Je précise que retoucher la base de données ne doit se faire qu'en tout tout dernier ressort.

    Merci par avance,
    MiniMarch

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2007
    Messages
    71
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2007
    Messages : 71
    Par défaut
    Alors, je viens de faire quelque chose qui ne me semble pas très correct, mais qui fonctionne : j'ai tout simplement choisi de mapper Hibernate différement de la base. Je m'explique : les clés primaires d'Hibernate ne portent pas sur les mêmes champs que dans la base de données. C'est moche, ça va contre le principe d'un développement durable et sain, mais en l'occurence ça marche...

    Et ce système peut résoudre plein de problèmes si la base n'est pas tout à fait parfaite...

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

Discussions similaires

  1. [Hibernate]POJO et many-to-one
    Par azpublic dans le forum Hibernate
    Réponses: 3
    Dernier message: 13/07/2006, 15h00
  2. html:select et hibernate many-to-one
    Par davdou dans le forum Struts 1
    Réponses: 1
    Dernier message: 05/07/2006, 14h56
  3. [Hibernate] Mapper une table sans clé primaire
    Par neuromencien dans le forum Hibernate
    Réponses: 4
    Dernier message: 13/06/2006, 17h05
  4. Hibernate : suppression sur relation many to one
    Par taf dans le forum Hibernate
    Réponses: 1
    Dernier message: 23/05/2006, 13h08
  5. [hibernate] "many-to-one"
    Par mehdi_swatch dans le forum Hibernate
    Réponses: 26
    Dernier message: 12/05/2006, 20h11

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