是否有必要将belongsTo变量显式定义为grails域属性?
我想知道这两个定义之间的区别是什么:是否有必要将belongsTo变量显式定义为grails域属性?,grails,Grails,我想知道这两个定义之间的区别是什么: class Book{ String title Author author static belongsTo = [author: Author] } class Book { String title static belongsTo = [author: Author] } 我的疑问是,在第一个示例中显式声明变量是可选的,还是第一个定义与第二个定义不同?谢谢 数据库级
class Book{
String title
Author author
static belongsTo = [author: Author]
}
class Book {
String title
static belongsTo = [author: Author]
}
我的疑问是,在第一个示例中显式声明变量是可选的,还是第一个定义与第二个定义不同?谢谢 数据库级的最终结果相同-book表将有一个
author\u id
列作为author
表的外键
belongsTo
-设置保存/删除的级联行为,并提供对author的反向引用,因此您可以执行bookInstance。author
最终结果在数据库级别相同-book表将有一个author\u id
列作为author
表的外键
belongsTo
-设置保存/删除的级联行为,并提供对author的反向引用,因此您可以执行bookInstance。author
它们是相同的,但原因不清楚。在第二个示例中,即使您没有声明Author
属性,也有一个属性,因为Grails使用AST转换为您添加属性。belongsTo
属性是一个映射;键(author
)用作变量名,值用作类型。因此,第一个示例中的Author
属性是多余的,因为它会在编译时为您添加
包含它并没有什么坏处,而且可以帮助不太了解Grails的IDE实现自动完成
类似地,Grails添加了Long id
和Long version
属性(如果mapping
块中有version false
,则省略该版本),这样您就可以将它们添加到代码中,但它们也是多余的。当然,如果您需要更改id的类型,您将是显式的
如果您在Author
类中有hasMany
属性,例如
static hasMany = [books: Book]
Grails还将基于该声明添加一个属性。属性也是一个映射,值指定集合元素的类型,键指定属性名称。所以实际上你得到了一个
Set<Book> books
但前提是在数据库中对它们进行排序是有意义的
注意,这些变量名只是约定。您可以随意命名作者
和图书属性,例如
static belongsTo = [writer: Author]
这将添加一个作者编写器
属性,以及
static hasMany = [tomes: Book]
这将添加一个
Set tomes
属性。它们是相同的,但原因不明显。在第二个示例中,即使您没有声明Author
属性,也有一个属性,因为Grails使用AST转换为您添加属性。belongsTo
属性是一个映射;键(author
)用作变量名,值用作类型。因此,第一个示例中的Author
属性是多余的,因为它会在编译时为您添加
包含它并没有什么坏处,而且可以帮助不太了解Grails的IDE实现自动完成
类似地,Grails添加了Long id
和Long version
属性(如果mapping
块中有version false
,则省略该版本),这样您就可以将它们添加到代码中,但它们也是多余的。当然,如果您需要更改id的类型,您将是显式的
如果您在Author
类中有hasMany
属性,例如
static hasMany = [books: Book]
Grails还将基于该声明添加一个属性。属性也是一个映射,值指定集合元素的类型,键指定属性名称。所以实际上你得到了一个
Set<Book> books
但前提是在数据库中对它们进行排序是有意义的
注意,这些变量名只是约定。您可以随意命名作者
和图书属性,例如
static belongsTo = [writer: Author]
这将添加一个作者编写器
属性,以及
static hasMany = [tomes: Book]
这将添加一个Set tomes
属性