web-dev-qa-db-fra.com

Relation un-à-plusieurs avec Join Table

J'ai une relation un-à-plusieurs modélisée à l'aide de la table de jointure:

create table t1 (id int primary key, name varchar(10) /*...*/);
create table t2 (id int primary key, name varchar(10) /*...*/);
create table t1_t2 (t1_id int, t2_id int, primary key (t1, t2));

Les tableaux sont censés modéliser la relation d'un t1 à plusieurs t2. Quelle est la bonne façon de modéliser ces tables à l'aide de JPA?

34
Hosam Aly

La table typique pour un T1 à plusieurs T2 est d'avoir une clé étrangère sur T2 pointant vers T1. La table T1_T2 n'est généralement pas nécessaire.

La structure JPA serait alors un à plusieurs, peut-être à double sens.


Il pourrait y avoir des dispositions pour faire fonctionner la structure que vous décrivez. Vous pouvez modifier T1_T2:

  • ajouter une contrainte unique sur T2 (pour qu'un seul T2 soit autorisé)

C'est vraiment ce que tu veux?

Modifié : oui, c'est ce que vous voulez ;-)

Je doute que vous puissiez trouver de nombreux exemples sur le net. Je n'ai pas de solution éprouvée, mais j'essaierais quelque chose dans ce sens:

Dans documentation de référence d'annotation Hibernate , voir "2.2.5.3.2.3. Unidirectionnel avec table de jointure" pour avoir l'idée. On dirait:

    @Entity
    public class Trainer {
        @OneToMany
        @JoinTable(
            name="TrainedMonkeys",
            joinColumns = @JoinColumn( name="trainer_id"),
            inverseJoinColumns = @JoinColumn( name="monkey_id")
        )
        public Set<Monkey> getTrainedMonkeys() {
        ...
    }
56
KLE