【问题标题】:Grails/GORM: The meaning of belongsTo in 1:N relationshipsGrails/GORM:belongsTo在1:N关系中的含义
【发布时间】:2009-03-17 15:57:36
【问题描述】:

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

换句话说:在 GORM 中指定 belongsTo-mapping 与不指定有什么影响?

【问题讨论】:

    标签: grails grails-orm


    【解决方案1】:

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

    如果您希望 Grails 执行 On Delete, CASCADE 引用操作,请指定 belongsTo。如果您希望 Grails 执行 On Delete, RESTRICT 引用操作,则不要指定 belongsTo

    例如

    // "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. 
    }
    

    希望这会有所帮助。

    【讨论】:

    • 我可以问你一个关于 belongsTo 的问题吗?如果我告诉 Player belongsTo Team 但我没有说明 Team hasMany Player 怎么办。如果 Team 被删除了 Player 会发生什么,他们也会被删除吗?
    • @nightingale2k1 - 我认为如果您以这种方式映射 Team-Player,两者之间将没有任何关联,因此当相应团队被删除时,玩家会被删除
    • belongsTo 表示composition(带belongsTo)和aggregation(不带belngsTo)的区别
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多