-->
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: [Mapping] manty-to-many avec attributs de relation
PostPosted: Mon Jan 25, 2010 9:23 am 
Beginner
Beginner

Joined: Fri May 23, 2008 4:37 am
Posts: 25
Bonjour à tous

J'ai les tables suivantes :
Quote:
CREATE TABLE student (
"std_id" SERIAL NOT NULL,
"std_firstname" VARCHAR(125),
"std_lastname" VARCHAR(125),
....
CONSTRAINT "pk_student" PRIMARY KEY("std_id"),
....
);

CREATE TABLE address (
"adr_id" SERIAL NOT NULL,
"adr_postcode" SMALLINT(4) NOT NULL,
...
CONSTRAINT "pk_address" PRIMARY KEY("adr_id")
);

CREATE TABLE contact (
"con_id" SERIAL NOT NULL,
"con_name" VARCHAR(255),
"adr_id" INTEGER,
...
CONSTRAINT "pk_contact" PRIMARY KEY("con_id"),
CONSTRAINT "fk_contact_address" FOREIGN KEY ("adr_id")
REFERENCES "address"("adr_id") ON DELETE RESTRICT ON UPDATE CASCADE
);

CREATE TABLE student_contact (
"std_id" INTEGER NOT NULL,
"con_id" INTEGER NOT NULL,
"default" BOOLEAN DEFAULT FALSE,
"type" INTEGER NOT NULL,
CONSTRAINT "pk_student_contact" PRIMARY KEY ("std_id", "con_id"),
CONSTRAINT "fk_student_contact_student" FOREIGN KEY ("std_id")
REFERENCES "student"("std_id") ON DELETE RESTRICT ON UPDATE CASCADE,
CONSTRAINT "fk_student_contact_contact" FOREIGN KEY ("con_id")
REFERENCES "contact"("con_id") ON DELETE RESTRICT ON UPDATE CASCADE
);


Comme vous pouvez le voir, j'ai une relation N:M entre Student et Contact.
- Un Student peux donc avoir plusieurs Contacts
- Chaque Contact est représenté par un "type"
- Chaque Student possède un Contact par defaut

J'ai déjà un mapping fonctionnel pour Student et pour Contact dans lequel cette relation est ignorée (j'ai très rarement besoin d'un Student avec toutes les informations de contacts et j'utilise Contact dans d'autres relations sans raports avec Student). Je voudrais avoir un mapping qui me permette de remonter toutes les informations sur Student et Contact (type de contact et qui est le contact par defaut) mais je ne vois pas comment transporter la valeur de "type" et de "default" dans polluer mes objets..

L'idéal (pour moi) serait d'avoir une classe StudentDetails qui maintiendrais une collection (de n'importe quelle sorte) de Contacts dans laquelle je pourrais retrouver les informations sur le "type" et le contact par defaut. J'ai donc commencé le mapping suivant :
Quote:
<hibernate-mapping >
<class name="me.StudentDetails" table="student">
<id column="std_id" name="id">
<generator class="sequence">
<param name="sequence">student_std_id_seq</param>
</generator>
</id>

<property column="std_firstname" name="firstName" />
<property column="std_lastname" name="lastName" />

<list name="contactDetails" lazy="false" table="student_contact">
<key column="std_id" />
<list-index column="con_id" />
<many-to-many class="me.StudentDetails.ContactDetails"
column="con_id" />
</list>

</class>

<class name="me.StudentDetails.ContactDetails" table="contact">
<id column="con_id" name="id" >
<generator class="sequence">
<param name="sequence">contact_con_id_seq</param>
</generator>
</id>

<property column="con_name" name="name" />

<many-to-one column="adr_id" name="address" lazy="false"
not-null="false" cascade="save-update" insert="true" />

</class>
</hibernate-mapping>

Mais je ne sais pas comment récupérer également les propriétés présentes dans la table de relation pour les insérer dans l'objet ContactDetails.



Bien sur je pourrais ignorer la puissance d'Hibernate et faire un truc du style
Code:
public class StudentDao {

  public List<Contact> getContacts(Integer studentId);

  public List<Contact> getDefaultContact(Integer studentId);

}

Mais je suis sur que l'un d'entre vous à une solution plus élégante à me proposer..

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.