Hibernate Как добавить столбец в средней таблице - PullRequest
2 голосов
/ 26 августа 2011

Вот подробности.

У меня есть 2 таблицы сущностей с отношением один ко многим.

Во-первых, у класса Exam есть много Category класса.Hibernate генерирует эти таблицы

______________
Exam
- Id
- Name 
- Category
______________
Category
- Id
- Name
______________
Exam_Category
- Exam_Id
- Category_Id

Мне нужно добавить дополнительный столбец в Exam_Category таблицу, например:

______________
Exam_Category
- Exam_Id
- Category_Id
* User_Id

Как мне это сделать.если когда-нибудь, как я также получу значение user_id, потому что Exam_Category не выставлено.Спасибо

Ответы [ 3 ]

1 голос
/ 26 августа 2011

Лучший способ сделать это - использовать коллекцию элементов.

@Entity
public class Exam {
    @CollectionOfElements(fetch = FetchType.LAZY)
    @JoinTable(name = "EXAM_CATEGORY", joinColumns = @JoinColumn(name = "FK_EXAM"))
    public Set<CategoryEntry> getCategories() {
        return this.categories;
    }
}

@Embeddable
public class CategoryEntry{

    private Category category;
    private User user;

    @ManyToOne
    @JoinColumn(name = "FK_CATEGORY", nullable = false)
    public Category getCategory() {
        return this.category;
    }

    @ManyToOne
    @JoinColumn(name = "FK_USER", nullable = false)
    public User getUser() {
        return this.user;
    }

// ... setters and such

}

@Entity
public class Category {
}

Этот подход более чист, чем отображение его как сущности, поскольку логически это не сущность с самого начала.

Затем вы можете добавить некоторые другие методы в Exam, чтобы получить все категории (без пользователей) или получить их в виде карты или что-то еще. Вы можете полностью скрыть этот промежуточный объект через инкапсуляцию, если это требуется.

0 голосов
/ 26 августа 2011

Вы можете использовать поле карты в вашем классе экзамена.Смотрите этот пост

0 голосов
/ 26 августа 2011

Это случай отношения «многие ко многим» с участием трех таблиц (трех внешних ключей).Этого нельзя достичь в Hibernate простым отображением.Вам придется расширить определение классов сущностей для поддержки настраиваемого столбца первичного ключа в «средней» таблице. *

Извлечь эту ссылку.

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