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] [mapping] Description des clés étrangères


Sujet :

Hibernate Java

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut [hibernate 3] [mapping] Description des clés étrangères
    Dans la doc de ref (§23.4.2) il y a cet exemple
    Code XML : 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
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    <class name="Customer">
    <id name="customerId"
    length="10">
    <generator class="assigned"/>
    </id>
    <property name="name" not-null="true" length="100"/>
    <property name="address" not-null="true" length="200"/>
    <list name="orders"
    inverse="true"
    cascade="save-update">
    <key column="customerId"/>
    <index column="orderNumber"/>
    <one-to-many class="Order"/>
    </list>
    </class>
    <class name="Order" table="CustomerOrder" lazy="true">
    <synchronize table="LineItem"/>
    <synchronize table="Product"/>
    <composite-id name="id"
    class="Order$Id">
    <key-property name="customerId" length="10"/>
    <key-property name="orderNumber"/>
    </composite-id>
    <property name="orderDate"
    type="calendar_date"
    not-null="true"/>
    <property name="total">
    <formula>
    ( select sum(li.quantity*p.price)
    from LineItem li, Product p
    where li.productId = p.productId
    and li.customerId = customerId
    and li.orderNumber = orderNumber )
    </formula>
    </property>
    <many-to-one name="customer"
    column="customerId"
    insert="false"
    update="false"
    not-null="true"/>
    <bag name="lineItems"
    fetch="join"
    inverse="true"
    cascade="save-update">
    <key>
    <column name="customerId"/>
    <column name="orderNumber"/>
    </key>
    <one-to-many class="LineItem"/>
    </bag>
    </class>
    <class name="LineItem">
    <composite-id name="id"
    class="LineItem$Id">
    <key-property name="customerId" length="10"/>
    <key-property name="orderNumber"/>
    <key-property name="productId" length="10"/>
    </composite-id>
    <property name="quantity"/>
    <many-to-one name="order"
    insert="false"
    update="false"
    not-null="true">
    <column name="customerId"/>
    <column name="orderNumber"/>
    </many-to-one>
    <many-to-one name="product"
    insert="false"
    update="false"
    not-null="true"
    column="productId"/>
    </class>
    <class name="Product">
    <synchronize table="LineItem"/>
    <id name="productId"
    length="10">
    <generator class="assigned"/>
    </id>
    <property name="description"
    not-null="true"
    length="200"/>
    <property name="price" length="3"/>
    <property name="numberAvailable"/>
    <property name="numberOrdered">
    <formula>
    ( select sum(li.quantity)
    from LineItem li
    where li.productId = productId )
    </formula>
    </property>
    </class>
    En fait je me demandais si il y avait une différence avec le code suivant (que j'ai utilisé et qui semble fonctionner) ?
    Code XML : 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
    <class name="LineItem">
    <composite-id name="id"
    class="LineItem$Id">
    <key-property name="customerId" length="10"/>
    <key-property name="orderNumber"/>
    <key-many-to-one name="productId" length="10"/>
    </composite-id>
    <property name="quantity"/>
    <many-to-one name="order"
    insert="false"
    update="false"
    not-null="true">
    <column name="customerId"/>
    <column name="orderNumber"/>
    </many-to-one>
    </class>

    (edit les balises code sont pas censée indenter et coloriser automatiquement ?)

  2. #2
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    J'aurais tendance a penser que la première solution est mieux (me demander pas pourquoi, je ne sais pas ...), mais quand j'ai voulu l'appliquer dans dans un de mes fichiers de mapping avec ceci

    Code XML : 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
    		<composite-id>
    			<key-property
    				name="AssNumeroCir"
    				column="ass_numero_cir"
     				type="long"
     				length="11" />
    			<key-property
    				name="EnfId"
    				column="enf_id"
    				type="java.lang.Byte"
    				length="3" />
    		</composite-id>
     
    		<many-to-one
    			name="fkAss"
    			column="ass_numero_cir"
    			class="Ass"
    			not-null="true" >
    		</many-to-one>
    au lieu de ceci
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    		<composite-id>
    			<key-many-to-one
    				name="AssNumeroCir"
    				column="ass_numero_cir"
    				class="Ass" />
    			<key-property
    				name="EnfId"
    				column="enf_id"
    				type="java.lang.Byte"
    				length="3" />
    		</composite-id>

    Mais là il me mets une erreur du genre "duplicate column"

    Donc j'ai enlever l'attribut column
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    		<many-to-one
    			name="fkAss"
    			class="Ass"
    			not-null="true" >
    		</many-to-one>
    mais maintenant il me dit que la column fkAss n'existe pas ! Normal me direz vous !

    Ma question est comment faire comprendre à Hibernate que la propriété de ma clé composée et mon many-to-one sont le même champ en base ???

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Janvier 2007
    Messages : 100
    Points : 57
    Points
    57
    Par défaut
    Donc apparement ca marche mieux quand on sort le many-to-one de la clé étrangère ...

    Pour répondre à ma question :
    Code XML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    		<many-to-one
    				name="fkTableLiée"
    				class="TableLiée"
    				insert="false"
    				update="false"
    				not-null="true" >
    			<column name="column_name_de_la_clé_primaire" />
    		</many-to-one>

    Là ca semble marcher beaucoup mieux, et il mélange pas mes colonnes !

    Je ne mets pas le topic en tant que résolu dans la mesure où je ne connais toujours pas la différence entre les deux définition !?
    (à savoir quelle différence entre mettre un key-many-to-one dans composite-id ET mettre un key-property dans composite-id et définir le many-to-one à part ? )

Discussions similaires

  1. modéliser une table mapping ayant des clés étrangères sur des vues
    Par touftouf57 dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 19/06/2010, 02h04
  2. Import/export sql 2000 impossible à causes des clés étrangères
    Par chouchou2clichy dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 08h27
  3. Réponses: 5
    Dernier message: 05/10/2006, 19h07
  4. Gestion des clés étrangères
    Par Gonelle dans le forum HyperFileSQL
    Réponses: 1
    Dernier message: 06/07/2006, 10h48
  5. [EJB2.1 Entity] [BES] Mapping automatique et clés étrangères
    Par Bobby McGee dans le forum Java EE
    Réponses: 3
    Dernier message: 15/10/2003, 10h33

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