Grails / GORM:belongsTo在1:N关系中的含义

时间:2009-03-17 15:57:36

标签: grails gorm

在普通的一对多映射中,“一”侧是该关联的所有者。为什么有人会使用belongsTo-mapping进行这样的映射?我是否遗漏了指定belongsTo的一些副作用?

换句话说:在GORM中指定belongsTo-mapping而不指定它会产生什么影响?

2 个答案:

答案 0 :(得分:19)

是否指定 belongsTo 取决于您想要的referential action类型。

如果您希望Grails执行 On Delete,CASCADE 参照操作,则DO指定 belongsTo 。如果您希望Grails执行 On Delete,RESTRICT 参照操作,则不要指定 belongsTo

e.g。

// "belongsTo" makes sense for me here. 
class Country {
  String name
  static hasMany = [states:State]
}

class State {
  String name;
  // I want all states to be deleted when a country is deleted. 
  static belongsTo = Country
}

// Another example, belongsTo doesn't make sense here
class Team {
  String name
  static hasMany = [players:Player]
}

class Player {
   String name
   // I want that a team should not be allowed to be deleted if it has any players, so no "belongsTo" here. 
}

希望这会有所帮助。

答案 1 :(得分:2)

指定belongsTo允许Grails透明地级联更新,保存和删除对象的子级。如果没有belongsTo,如果您尝试删除主记录,如果它拥有任何详细信息,您将最终获得外键违规。