-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: problème d'update avec une asso via une table de jointure
PostPosted: Wed Dec 12, 2007 10:07 am 
Newbie

Joined: Wed Dec 12, 2007 8:23 am
Posts: 1
Bonjour,

J'utilise Hibernate 3.2.5.ga avec une base de données existante.
Dans cette base de donnée, j'ai trois tables ; appelons les A, B et C selon le schéma suivant (les 3 petits points de suspension signifie qu'il y a du contenu mais que ce dernier n'est pas pertinent ici) :

Code:
create table A (id varchar(255) not null, ... , primary key (id));
create table B (id varchar(255) not null, ..., primary key (id));
create table C (A_id varchar(255) not null, B_id varchar(255) not null, primary key (A_id), unique (A_id), unique (B_id), foreign key (A_id) references A on delete cascade, foreign key (B_id) references B on delete cascade);


La table C sert à définir une association entre un élément de A avec un élément de B ; l'association est optionnelle, cad que des éléments de A peuvent ne pas être associés avec des éléments de B.

Maintenant, j'ai ma couche objet en Java dans une application qui permet la manipulation de ces associations. Dans cette couche objet, la table A est représentée par la classe d'objets ClassA et la table B par la classe d'objects ClassB. L'association en elle-même n'a pas de sens en tant que classe d'objets, mais plus comme attributs d'instance de type ClassB dans ClassA.

Aussi, pour réaliser le mapping entre le modèle de base de données et celui objet, j'ai défini une assiociation plusieurs-à-un (many-to-one) unidirectionnelle sur une table de jointure comme indiqué ci-dessous :

Code:
<class name="package.ClassB" table="B">
      <id name="id" column="id" type="java.lang.String" />
      <!-- une suite de properties s'ensuit ici -->
      ...
</class>

<class name="package.ClassA" table="A">
      <id name="id" column="id" type="java.lang.String" />
      <join table=C"
            optional="true">
         <key column="A_id"
              unique="true"/>
         <many-to-one name="field_b"
                      class="package.ClassB"
                      column="B_id"
                      not-null="true"
                      unique="true"/>
      </join>
</class>


Avec un tel mapping, la table C est correctement valorisée lors d'une mise à jour de l'association existante entre un élément de A avec un élément de B, mais pas lorsque l'association est créée entre un élément de A (qui n'avait donc pas d'association auparavant) avec un élément de B.

Exemple de code :

Code:
ClassB b = session.get(idb); // b.getA() == null => pas d'association
ClassA a = session.get(ida);
b.setA(a);
session.update(b);
// malheureusement ici l'association n'a pas été créé en base de données :-(


Ceci me surprend, d'autant plus que tout le reste marche correctement et que ce genre d'association est référencé dans le document http://www.hibernate.org/hib_docs/v3/re ... ional-join

Auriez vous une idée du problème ? Qu'est ce qui cloche ?

Merci


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.