6

我是 Grails 的新手。我可以使用“hasOne”或“hasMany”而不使用“belongsTo”到另一个域类吗?

提前致谢。

4

3 回答 3

11

是的你可以。请参阅 Grails 文档中的示例:http: //grails.org/doc/2.3.8/guide/GORM.html#manyToOneAndOneToOne

文档中的 hasMany (没有 belongsTo)示例:

一对多关系是当一个类(例如 Author)具有另一个类(例如 Book)的许多实例时。使用 Grails,您可以使用 hasMany 设置定义这样的关系:

class Author {
    static hasMany = [books: Book]
    String name
}

class Book {
    String title
}

在这种情况下,我们有一个单向的一对多。默认情况下,Grails 会将这种关系映射到连接表。

文档中的 hasOne (没有 belongsTo)示例:

示例 C

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
}
于 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]
    }

在另一种情况下,如果您删除作者,它将以级联方式删除该作者的所有书籍。

多对一/一对一:保存和删除从所有者到依赖的级联(具有belongsTo的类)。

一对多:保存总是从一侧级联到多侧,但如果多侧有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 回答