私はGrailsが初めてです。「belongsTo」を使用せずに「hasOne」または「hasMany」を別のドメインクラスに使用できますか?
前もって感謝します。
私はGrailsが初めてです。「belongsTo」を使用せずに「hasOne」または「hasMany」を別のドメインクラスに使用できますか?
前もって感謝します。
はい、できます。Grails doc の例を参照してください: http://grails.org/doc/2.3.8/guide/GORM.html#manyToOneAndOneToOne
ドキュメントの hasMany (begsTo なし) の例:
1 対多の関係とは、あるクラス (Author など) が別のクラス (Book など) のインスタンスを多数持つ場合です。Grails では、このような関係を hasMany 設定で定義します。
class Author {
static hasMany = [books: Book]
String name
}
class Book {
String title
}
この場合、単方向の 1 対多です。デフォルトでは、Grails はこの種の関係を結合テーブルにマップします。
ドキュメントの hasOne (begsTo なし) の例:
例 C
class Face {
static hasOne = [nose:Nose]
}
class Nose {
Face face
}
このプロパティを使用すると、前の例の逆テーブルに外部キーが配置されることに注意してください。したがって、この場合、外部キー列は face_id という列内の鼻テーブルに格納されます。また、hasOne は双方向の関係でのみ機能します。
最後に、1 対 1 の関係の片側に一意の制約を追加することをお勧めします。
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
}
この場合、Author を削除してもまだ存在し、独立しています。
class Author {
static hasMany = [books: Book]
String name
}
class Book {
String title
static belongsTo = [author: Author]
}
この場合、著者を削除すると、その著者がカスケードで作成したすべての本が削除されます。
多対 1/1 対 1: 所有者から従属 (belongsTo を持つクラス) へのカスケードを保存および削除します。
一対多: 保存は常に一側から多側にカスケードしますが、多側に属している場合、削除もその方向にカスケードします。
多対多: 「所有者」から「従属」へのカスケードのみを保存し、削除は保存しません。
http://grails.org/doc/2.3.x/ref/Domain%20Classes/belongsTo.html
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
}
終わり!!