Hibernate - @ManyToMany с дополнительными полями в объекте отображения - PullRequest
1 голос
/ 23 апреля 2009

Мой упрощенный сценарий сущности выглядит следующим образом:

ЧЕЛОВЕК связан с КОМПАНИЕЙ в определенной роли (зевок).

Моей первой мыслью было настроить отношения ManyToMany между ЛИЦОМ и КОМПАНИЕЙ. Однако и, очевидно, я не могу включить тип ROLE в таблицу ROLE таким образом (в качестве другого поля два внешних ключа).

Я признаю, что правильный способ сделать это - использовать два отношения OneToMany и включить роль ROLE как отдельную сущность ( уже ответил на stackoverflow ).

Но вот где я застрял: Я использую html-форму, чтобы добавить человека в компанию и выбрать подходящую роль, как мне сохранить это в базе данных или лучше: как мне сказать Hibernate, чтобы сохранить его. У Лица есть Список, а также у Компании. Роль есть Человек и Компания. Как они встречаются в середине? Итак, в основном то, что я спрашиваю:

Какова точная конфигурация отображения Hibernate, чтобы я мог сохранить Человека с Ролью в Компании за один шаг?

1 Ответ

1 голос
/ 23 апреля 2009

Посмотрите на Каскадное и Табличное наследование. Например, приведенный ниже код будет представлять три таблицы. Таблица компании, таблица ролей с CATG и таблица пользователей. Таблица ролей будет использовать наследование одной таблицы, где CATG будет управляться hibernate, а hibernate создаст правильный класс на основе значения столбца CATG и отображения. И каскадирование будет вставлять роль одновременно с пользователем.

@Table( name = "USER" )
Public User
{


    @ManyToOne( fetch = FetchType.LAZY )
    @JoinColumn(  cascade = CascadeType.ALL, name="ROLE_NAME" )
    private CompanyRole   role;

}

@Inheritance( strategy = InheritanceType.SINGLE_TABLE )
@DiscriminatorColumn( name="CATG", discriminatorType=DiscriminatorType.STRING )
@Table( name = "Role" )
public Role
{

}

@DiscriminatorValue( "CMPY_ROLE" )
public CompanyRole extends Role
{

    private Company company
}

@Table( name = "COMPANY" )
Public Company 
{
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...