【问题标题】:How to save objects having hasOne and belongsTo relationship in grails如何在grails中保存具有hasOne和belongsTo关系的对象
【发布时间】:2011-08-12 05:05:56
【问题描述】:

我已经定义了三个类。

1)

class Office extends Organization {

   String name
   DistanceChart distanceChart 
   static constraints = {
      name(nullable : false)
      distanceChart(nullable:true)
   }
   static mapping = {
      officeRoles(cascade:'all')
   }

   public String toString() {
      name
   }
}

2)

class DistanceChart {
   VehicleClassification classification1
   VehicleClassification classification2
   VehicleClassification classification3
   VehicleClassification classification4
   VehicleClassification classification5
   List<PointDistanceMapping> pointDistanceMapping =new ArrayList<PointDistanceMapping>()

   static contraints ={
      classification1(nullable:true);
      classification2(nullable:true)
      classification3(nullable:true)
      classification4(nullable:true)
      classification5(nullable:true)
      pointDistanceMapping()
   }
   static belongsTo = [office:Office]
   static hasMany = [pointDistanceMapping : PointDistanceMapping]
   static mapping = {
      pointDistanceMapping cascade: "all"
   }
   public String toString() {
      id
   }   
}

3)

class PointDistanceMapping {
   Point point
   float distance1
   float distance2
   float distance3
   float distance4
   float distance5

   static  constraints = {
      point()
      distance1(nullable:true)
      distance2(nullable:true)
      distance3(nullable:true)
      distance4(nullable:true)
      distance5(nullable:true)
   }
   static belongsTo = [distanceChart : DistanceChart]
   public String toString() {
      id
   }
}

我有两个疑问:

1) 我是否需要在两个类中指定关系,即 hasOne 或 hasMany 和 belongsTo(双向)。那么定义的好习惯是什么grails 中的关系。

2) 我的第二个问题 grails 会自动保存子对象。在这种情况下。我将 pointDistanceMapping 对象作为数组获取,grails 是否将 pointDistanceMapping 数组值保存到数据库中,并将负责在 point_distance_mapping 中设置外键 distance_chart_id

当我保存 DistanceChart 对象时,grails 是否在办公桌中设置 distance_chart_id

如果 grails 不保存关联的对象意味着当我保存 DistanceChart 时,pointdistancemapping 被保存。那么如何做到这一点。

distanceChart 保存时如何将 distance_chart_id 保存在 office 表中。

【问题讨论】:

  • 您在 PointDistanceMapping 中有拼写错误 - “nulable”应该是“nullable”

标签: hibernate grails


【解决方案1】:
  1. 您可以更方便地进行迭代。通常,如果您的代码不需要关系属性 (YAGNI) - 不要创建一个。如果集合很大,无论如何不要创建集合属性,最好使用动态的findAll*()方法对关系进行操作。

  2. Grails 级联由belongsTocascade mapping DSL 控制:

    "cascade - [...] 可以是allmergesave-updatedeletelockrefresh 中的一个或多个(逗号分隔) 、evictreplicateall-delete-orphan(仅限一对多关联)。 默认情况下,GORM 配置all 的级联策略,以防一个实体belongsTo 另一个"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    相关资源
    最近更新 更多