Grails Domain Class:hasOne,hasMany without belongsTo

Man*_*san 6 grails grails-orm grails-domain-class domain-data-modelling

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

提前致谢.

hei*_*kim 11

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

来自doc的hasMany(没有belongsTo)示例:

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

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

class Book {
    String title
}
Run Code Online (Sandbox Code Playgroud)

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

来自doc的hasOne(没有belongsTo)示例:

例C

class Face {
    static hasOne = [nose:Nose]
}
class Nose {
    Face face
}
Run Code Online (Sandbox Code Playgroud)

请注意,使用此属性会将反向表上的外键放到上一个示例中,因此在这种情况下,外键列存储在名为face_id的列内的nose表中.此外,hasOne仅适用于双向关系.

最后,在一对一关系的一侧添加唯一约束是个好主意:

class Face {
    static hasOne = [nose:Nose]
    static constraints = {
        nose unique: true
    }
}

class Nose {
    Face face
}
Run Code Online (Sandbox Code Playgroud)


lui*_*eta 7

是的,你可以,但它的行为不同

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

    class Book {
        String title

    }
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果您删除作者仍然存在且独立的书籍.

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

 class Book {
        String title
      static belongsTo = [author: Author]
    }
Run Code Online (Sandbox Code Playgroud)

在另一种情况下,如果您删除作者,它将删除该级别作者的所有书籍.

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

一对多:保存始终从一侧到多侧保持级联,但如果多方都属于,那么删除也会在该方向级联.

多对多:只保存从"所有者"到"依赖"的级联,而不是删除.

http://grails.org/doc/2.3.x/ref/Domain%20Classes/belongsTo.html