Исключение дублирования записи @ManyToMany - PullRequest
0 голосов
/ 14 января 2011

Я сопоставил двунаправленное исключение «многие ко многим» между сущностями «Курс» и «Ученик» следующим образом:

Course
{
    ...
    private Collection<Trainee> students;
    ...
    @ManyToMany(targetEntity = lesson.domain.Trainee.class,
        cascade = {CascadeType.All}, fetch = {FetchType.EAGER})
    @Jointable(name="COURSE_TRAINEE",
        joincolumns = @JoinColumn(name="COURSE_ID"),
        inverseJoinColumns = @JoinColumn(name = "TRAINEE_ID"))
    @CollectionOfElements
    public Collection<Trainee> getStudents() {
        return students;
        }
    ...
}


Trainee
{
    ...
    private Collection<Course> authCourses;
    ...
    @ManyToMany(cascade = {CascadeType.All}, fetch = {FetchType.EAGER},
        mappedBy = "students", targetEntity = lesson.domain.Course.class)
    @CollectionOfElements
    public Collection<Course> getAuthCourses() {
        return authCourses;
    }
    ...
}

Вместо создания таблицы, в которой первичный ключ состоит из двух внешних ключей(импортированный из таблицы связанных двух сущностей), система генерирует таблицу "COURSE_TRAINEE" со следующей схемой:

alt text

Я работаю над MySQL 5.1 и моим приложением.Сервер JBoss 5.1.Кто-нибудь догадывается почему?

Ответы [ 2 ]

3 голосов
/ 14 января 2011

В дополнение к Бэнсу Олаху: ограничение первичного ключа для пары (COURSE_ID, TRAINEE_ID) не создается, потому что ваше сопоставление не говорит об уникальности этих пар.Вам нужно изменить Collection s на Set s в вашем коде, чтобы выразить это ограничение, и будет создан первичный ключ.

2 голосов
/ 14 января 2011

Используйте либо @CollectionOfElements ИЛИ @ManyToMany.Не используйте их оба одновременно!Помните, что @CollectionOfElements специфичен для Hibernate, а @ManyToMany основан на стандарте JPA.

Дальнейшее чтение: http://docs.jboss.org/ejb3/app-server/HibernateAnnotations/reference/en/html_single/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...