6

私はGrailsが初めてです。「belongsTo」を使用せずに「hasOne」または「hasMany」を別のドメインクラスに使用できますか?

前もって感謝します。

4

3 に答える 3

11

はい、できます。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
}
于 2014-05-28T07:53:53.610 に答える
7

はい、できますが、動作が異なります

 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

于 2014-05-28T07:58:40.393 に答える
2

はい、クラス定義のように非常に簡単ですが、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 


}

終わり!!

于 2014-05-28T10:11:55.020 に答える