2009-04-23 2 views
1

Мой упрощена Entity Сценарий выглядит следующим образом:Hibernate - @ManyToMany с дополнительными полями в отображении объекта

ЛИЦО связан с компанией, в определенной роли (зевать).

Моя первая мысль заключалась в настройке отношений ManyToMany между PERSON и COMPANY. Однако, по-видимому, я не могу включить тип ROLE в таблицу ROLE таким образом (как другое поле - два внешних ключа).

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

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

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

ответ

1

Посмотрите на каскадное и табличное наследование. Например, приведенный ниже код будет представлять собой три таблицы. Таблица компаний, таблица ролей с CATG и таблицей пользователей. В таблице ролей будет использоваться однонаправленное наследование таблицы, где CATG будет управляться спящим и спящим режимами, создавая правильный класс на основе значения столбца 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 
{ 
} 
+0

Хорошо, я как-то следил за вашим советом, спасибо! Теперь я вставляю РОЛЬ с уже существующим ЧЕЛОВЕКОМ и КОМПАНИИ. Это нормально, так как оба они существуют и могут существовать без отношений ROLE. Я сконфигурировал два сопоставления @OneToMany в классах PERSON и COMPANY плюс два сопоставления @ManyToOne в классе ROLE. Я пока не уверен в целостности данных, но он работает по своему желанию. Определенно интересные аспекты, использующие наследование и каскадирование для таких ситуаций. Еще раз спасибо! – Wolfram

Смежные вопросы