Grails Domain Class:hasOne,hasMany without belongsTo

时间:2014-05-28 07:45:53

标签: grails gorm grails-domain-class domain-data-modelling

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

提前致谢。

3 个答案:

答案 0 :(得分:11)

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

来自doc的

hasMany(没有belongsTo)示例:

  

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

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

class Book {
    String title
}
  

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

doc中的

hasOne(没有belongsTo)示例:

  

示例C

class Face {
    static hasOne = [nose:Nose]
}
class Nose {
    Face face
}
  

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

     

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

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

class Nose {
    Face face
}

答案 1 :(得分:7)

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

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

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

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

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

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

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

答案 2 :(得分: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 


}

完成!!