отношения «многие ко многим» в одном классе

#grails #grails-orm

Вопрос:

Как указано в названии, мне нужно сказать грейлсу ГОРМУ, что доменный класс имеет отношение «многие ко многим» к самому себе. В моей системе у меня есть класс «курс», этот класс «курс» не может иметь ни одного, одного или нескольких коррелятов.
Беря пример:

математический анализ 2

  • Чтобы иметь возможность пройти курс математического анализа 2, вам необходимо иметь утвержденные курсы математического анализа 1 и физики.
  • математический анализ 1 не имеет никаких коррелятов или курсов, которые должны быть одобрены, чтобы кто-либо мог пройти этот курс.

У меня есть следующее:

 class Course {
    String name
    static hasMany = [correlatives: Course]
    static belongsTo = [target_course: Course]
}
 

Но, похоже, это не оказывает того влияния на базу данных, которого я ожидаю.

Я ожидаю, что у меня будет таблица course_course, в которой будет много ко многим, как показано ниже:

 course_course
int id_course_course
int id_correlative_course 
int id_target_course
 

Я упускаю здесь что-то важное?, помогите, пожалуйста!

Ответ №1:

Вам не нужна таблица «много ко многим», чтобы представить это. Хотя у каждого Course может быть «много» коррелятов, у каждого коррелированного курса есть только один родитель.

Это достаточно представлено одной таблицей, например (в значительной степени зависит от любых указанных вами сопоставлений):

 course:
    id (int)
    name (varchar)
    target_course_id (int, nullable)
 

Комментарии:

1. Спасибо!, можно ли получить доступ к списку многих соответствующих курсов из объекта курса?

2. Абсолютно! У тебя есть correlatives поле внутри Course . Так что , если бы вы это сделали Course a , вы могли бы просто получить доступ к этому как a.correlatives . Любое имя hasMany автоматически существует в виде поля, например this…by по умолчанию это Set (я думаю), но вы можете переопределить любой тип коллекции, который вам нужен.

3. Спасибо, чувак!, Документация Grails настолько упрощена, что иногда сбивает с толку.