Отношение многие ко многим в GvNIX

В моей модели ER у меня есть два класса (User и Routine), которые связаны многими со многими отношениями, но я не знаю, как перевести это в код GvNIX. Должен ли я использовать атрибут set в каждом классе, определяющий количество элементов ко многим? Например:

field set --fieldName routines --class ~.objects.User --type ~.objects.Routine --cardinality MANY_TO_MANY 
field set --fieldName users --class ~.objects.Routine --type ~.objects.User --cardinality MANY_TO_MANY

1 ответ

Решение

Чтобы отобразить отношение "многие ко многим" в обоих направлениях, одно направление должно быть определено как владелец, а другое должно использовать атрибут --mappedBy, чтобы определить его отображение.

Принимая типичный пример "Сотрудник-Проект", один Сотрудник может участвовать во многих Проектах, а в одном Проекте может быть много Сотрудников. Чтобы создать такие двунаправленные отношения "многие ко многим", используйте команду field set:

Создайте сущности:

entity jpa --class ~.domain.Project
entity jpa --class ~.domain.Employee

Создайте владельца отношений:

field set --class ~.domain.Employee --fieldName projects --type ~.domain.Project

Затем создайте другую сторону отношений:

field set --class ~.domain.Project --fieldName employees --type ~.domain.Employee --mappedBy projects

Если --mappedBy не используется, то поставщик сохраняемости примет два независимых отношения, и в итоге вы получите дубликаты строк, вставленные в таблицу соединений. Если у вас есть концептуальные двунаправленные отношения, но у вас есть две разные таблицы соединений в базе данных, вы не должны использовать --mappedBy, так как вам нужно поддерживать две независимые таблицы.

Наконец, чтобы настроить сгенерированный код, просто используйте силу JPA, Люк, взгляните на http://en.wikibooks.org/wiki/Java_Persistence/ManyToMany

Другие вопросы по тегам