#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 настолько упрощена, что иногда сбивает с толку.