Подтвердить что ты не робот

Связь "один-ко-многим" с таблицей объединения

У меня есть отношение "один ко многим", смоделированное с использованием таблицы соединений:

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));

Предполагается, что таблицы должны моделировать отношение одного t1 ко многим t2. Каков правильный способ моделирования этих таблиц с помощью JPA?

4b9b3361

Ответ 1

Типичная таблица для одного T1 ко многим T2 должна иметь внешний ключ на T2, указывающий на T1. Таблица T1_T2 обычно не требуется.

Структура JPA будет тогда "одно-ко-многим", возможно, двухсторонним.


Могут быть некоторые меры, чтобы структура, которую вы описываете, работала. Вы можете изменить T1_T2:

  • добавить уникальное ограничение на T2 (так что допускается только один T2)

Это действительно то, что вы хотите?

Отредактировано: да, это то, что вы хотите; -)

Я сомневаюсь, что вы можете найти множество примеров в сети. У меня нет доказанного решения, но я бы попробовал что-то в этом направлении:

В справочная документация аннотации Hibernate, см. "2.2.5.3.2.3. Однонаправленная таблица соединений", чтобы получить эту идею. Это выглядит так:

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