Как сохранить объекты, имеющие отношение hasOne и ownTo в grails - PullRequest
1 голос
/ 12 августа 2011

Я определил три класса.

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 и принадлежат (двунаправленный). Так что является хорошей практикой для определения отношений в граале.

2) Мой второй вопрос: grails автоматически сохраняет дочерние объекты . в этом контексте. Я получаю объект pointDistanceMapping в виде массива, сохраняет ли grails значения массива pointDistanceMapping в базу данных и позаботится о установке внешнего ключа distance_chart_id в point_distance_mapping

Устанавливает ли Grails distance_chart_id в офисном столе, когда я сохраняю объект DistanceChart

Если Grails не сохраняет связанные объекты, значит, когда я сохраняю DistanceChart, сопоставление pointdistance сохраняется. Затем, как это сделать.

Как сохранить distance_chart_id в офисном столе при сохранении distanceChart.

1 Ответ

1 голос
/ 12 августа 2011
  1. Все, что вам удобнее повторять.Как правило, если вашему коду не требуется свойство отношения (YAGNI) - не создавайте его.Если коллекция очень большая, в любом случае не создавайте свойство коллекции, лучше используйте динамические методы findAll*() для работы с отношениями.

  2. Каскадирование Грааля контролируется belongsTo и cascade отображение DSL :

    "cascade - [...] Может быть одним или несколькими (через запятую) из all, merge, save-update, delete, lock, refresh, evict, replicate или all-delete-orphan (только для ассоциаций один-ко-многим). По умолчанию GORM настраивает политику каскадирования:all в случае, когда одно юридическое лицо belongsTo другое "

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...