Класс домена Grails: hasOne, hasMany без принадлежности к
Я новичок в Grails. Могу ли я использовать "hasOne" или "hasMany", не используя "ownTo" для другого класса домена?
Заранее спасибо.
3 ответа
Да, ты можешь. Смотрите примеры в Grails doc: http://grails.org/doc/2.3.8/guide/GORM.html
Пример hasMany (без принадлежности) из документа:
Отношение "один ко многим" - это когда один класс, например Author, имеет много экземпляров другого класса, например Book. С Grails вы определяете такие отношения с помощью настройки hasMany:
class Author {
static hasMany = [books: Book]
String name
}
class Book {
String title
}
В этом случае мы имеем однонаправленное отношение один ко многим. По умолчанию Grails отобразит этот тип отношений с помощью таблицы соединений.
Пример hasOne (без принадлежности) из документа:
Пример С
class Face {
static hasOne = [nose:Nose]
}
class Nose {
Face face
}
Обратите внимание, что использование этого свойства помещает внешний ключ в обратной таблице в предыдущий пример, поэтому в этом случае столбец внешнего ключа хранится в основной таблице внутри столбца с именем face_id. Кроме того, hasOne работает только с двунаправленными отношениями.
Наконец, это хорошая идея, чтобы добавить уникальное ограничение на одну сторону отношения один-к-одному:
class Face {
static hasOne = [nose:Nose]
static constraints = {
nose unique: true
}
}
class Nose {
Face face
}
Да можно, но вести себя иначе
class Author {
static hasMany = [books: Book]
String name
}
class Book {
String title
}
В этом случае при удалении автора книги еще существуют и являются независимыми.
class Author {
static hasMany = [books: Book]
String name
}
class Book {
String title
static belongsTo = [author: Author]
}
В этом другом случае, если вы удалите автора, он удалит все книги этого автора в каскаде.
Many-to-one / one-to-one: сохраняет и удаляет каскад от владельца к зависимому объекту (класс с ownTo).
Один-ко-многим: каскады сохраняются всегда с одной стороны на сторону многих, но если сторона с множеством имеет принадлежность, то также удаляются каскады в этом направлении.
Многие ко многим: только сохраняет каскад от "владельца" к "зависимому", но не удаляет.
http://grails.org/doc/2.3.x/ref/Domain%20Classes/belongsTo.html
да, очень просто, как определение класса, но только указать hasMany, но не нужно hasOne
class Student {
String name
User userProfile
static hasMany =[files:File]
}
class User {
String uname
Student student
}
class File {
String path
Student student // specify the belongs to like this no belong to
}
Готово!!