2015-02-06 2 views
0

У меня есть класс домена, который может принадлежать одному из нескольких классов. Когда я пытаюсь сохранить, я вижу ошибки проверки.Grails принадлежит нескольким классам

class Teacher { 
    Book book 
} 

class Student { 
    Book book 
} 

// book can belong to either a student or a teacher 
class Book { 
    static belongsTo = [student : Student, teacher : Teacher] 
} 

Ошибка проверки свидетельствует о том, что книга не должна принадлежать ОБА ученика и учителя (и не может быть пустым), но я хочу, чтобы смоделировать его так, что он может принадлежать либо. Как мне это сделать, пожалуйста?

Пожалуйста, не обращайте внимания на то, что для моего примера вы можете изменить его так, чтобы Личность владела книгой, а Учитель и Студент - оба типа Лица. Я хочу знать, как создать правильную принадлежность.

Edit объяснить рассуждения позади требования:

Там будет 3 таблицы создано: Книга, студенты и преподаватели. Мне нужно создать индекс в классе книги, который относится к ученику и учителю. Это значит, что запрос «найти все книги, принадлежащие Учителю А», можно сделать как можно быстрее.

Если бы был только один belongsTo (пример показан, если для учителя владельца), то это делается так:

статическое отображение {индекс учителя: «teacher_idx» } =

ответ

1

Ну это очень выполнимо, просто потому, что ваш подход здесь неправильный.

belongsTo используется таким образом, когда объект должен и должен быть сопоставлен с каким-либо другим объектом. Ничего подобного нет.

Что вы можете сделать, это

1. create an Abstract Domain `Book` 
2. create an Domain `StudentBook` it belongs to `Student` 
3. create an Domain `TeacherBook` it belongs to `Teacher` 

Так вот только одна таблица будет создана для трех доменов, названный в книге. Эта таблица будет содержать поле class, которое определит, принадлежит ли книга Студенту или Учителю.

0

Если я вас понимаю, то вы можете использовать другую версию belongsTo, которая не хранит назад обращение владельца класса, например

class Book { 
    static belongsTo = [Student, Teacher] 
} 

Ref

+0

ли это требование поддержки индекса я заложенную в вопросе пожалуйста? – John

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