ManyToMany Relation не создает первичный ключ - PullRequest
1 голос
/ 08 апреля 2010

У меня есть отношение ManyToMany между двумя классами: ClassA и ClassB, но когда в таблице для этого отношения (таблица с именем objectA_objectB) нет первичного ключа.

В моем классе А у меня есть следующее:

@ManyToMany(fetch=FetchType.LAZY)
@OrderBy(value="name")
@JoinTable(name="objectA_objectB",
        joinColumns=
            @JoinColumn(name="idObjectA", referencedColumnName="id"),
        inverseJoinColumns=
            @JoinColumn(name="idObjectB", referencedColumnName="id")
)
private List<ClassB> objectsB;

и в моем ClassB у меня обратное отношение

@ManyToMany
List<ClassA> objectsA;

Я просто хочу сделать первичный ключ для обоих идентификаторов, но мне нужно изменить имя столбцов, как я. Почему отсутствует ПК? Как я могу определить это?

Я использую реализацию JPA 2.0 Hibernate, если это поможет.

Спасибо.

1 Ответ

1 голос
/ 08 апреля 2010

Вы правы

Я сделал такой же подход, как показано в вашем вопросе.И действительно, Hibernate не генерирует свой составной первичный ключ, как ожидалось.

Поэтому, если вы хотите сгенерировать его составной первичный ключ, вы должны разделить свои @ManyToMany на отношения @ OneToMany- @ ManyToOne.См. здесь как ...

ОБНОВЛЕНИЕ

Если у вас двунаправленные отношения, вы должны настроить обратную сторонусвязь с помощью атрибута mappedBy

// ClassA

@ManyToMany(fetch=FetchType.LAZY)
@JoinTable(name="objectA_objectB",
    joinColumns=
        @JoinColumn(name="idObjectA", referencedColumnName="id"),
    inverseJoinColumns=
        @JoinColumn(name="idObjectB", referencedColumnName="id")
)
private List<ClassB> objectsB;

...

// ClassB

// You do not specify the foreign key column here (it is mapped by the other side)
@ManyToMany(mappedBy="objectsB")
List<ClassA> objectsA;

mappedBy = "objectsB" говорит

Посмотрите, содержит ли свойство objectsB в ClassA меня иесли это так, сохраните наши отношения в таблице objectA_objectB

...