Отношение многие ко многим в 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