在两个类中指定关系有什么用(hasOne / hasMany和belongsTo)?我们来举个例子
class User {
Profile profile
}
class Profile {
String name
String age
String location
}
在这种情况下,User
只有一个Profile
。那么如何指定hasOne
和belongsTo
关系以及为什么?
指定关系类型有什么用?我们可以拥有该对象,而不是在User中指定hasOne。
答案 0 :(得分:3)
您可以使用其中之一。 hasOne
和belongsTo
属性定义了类之间的关系,并在删除保存和更新时添加了级联。如果您决定不使用这些属性,则必须实现自己的级联效果。
在开发大规模应用程序时,不使用这些属性并映射关系是有利的,因为它们会导致性能开销。这在Burt Beckwiths blog
中有解释答案 1 :(得分:2)
使用hasOne和belongsTo控制GORM如何处理您的关系。根据{{3}},以下是真实的:
Class User {Profile profile}将产生多对一关系。这意味着任意数量的客户端都可以指向给定的配置文件。除此之外没有任何关系。
如果配置文件被赋予静态belongsTo = [client:Client],则该关系变为双向多对一关系,这意味着客户端具有一个配置文件,该配置文件属于特定客户端。 GORM现在将管理在保存,更新或删除客户端时保留配置文件(保存,更新和删除)。这也允许您通过GORM查询配置文件并公开对客户端的反向引用。
hasOne用于创建一对一的关系。您应该在关系的拥有方(在您的示例中为客户端)应用此方法。这将允许GORM在保存,更新或删除客户端时管理配置文件的持久性。
最后,hasMany允许您从拥有方(在您的情况下为客户端)中定义一对多关系,其中客户端可能有许多配置文件(愚蠢,但我使用您的示例属性)。同样,这告诉GORM在保存,更新或删除客户端时应该处理持久性。关于这种关系有一些问题,我强烈建议你阅读参考文档,以了解如何正确使用这种关系。