Grails: сохранение вложенных объектов с использованием привязки данных XML - PullRequest
4 голосов
/ 29 октября 2010

Я создаю REST-сервис в Grails для приема данных из скрипта Python.Скрипт python генерирует XML-представление графа объекта и передает его контроллеру.Все отлично работает для моих плоских объектов, но я не могу понять, как справиться со случаем, когда доменный объект содержит набор дочерних объектов.По несвязанным причинам мой уровень DOA - это чистый Java JPA.

Например, классы моего домена (не считая getters / setters / etc):

class Schedule {
  String name;
  @OneToMany;
  HashSet<Step> steps;
}

class Step {
    String name;
    @ManyToOne;
    Schedule schedule;
}

Мой скрипт на python генерирует XML подобноследующее:

<schedule>
  <name>Foo</name>
  <steps>
     <step>
       <name>Bar</name>
     </step>
     <step>
        <name>Blatz</name>
     </step>
  </steps>
</schedule>

В моем контроллере у меня есть это:

def save = {
   def schedInstance = new Schedule(params['schedule'])
   ...
}

Свойство steps никогда не заполняется.Если я дам параметры в журнал, все данные шагов будут сжаты вместе (В моем примере выше это приведет к шагам: «BarBlatz»

Я должен сделать что-то ужасно неправильно. Я мог бы представить, что этоОбщая задача. Все, что я смог найти о вложенных объектах, связано с объектами команд. Я не хочу дублировать мой код объекта домена в объекте команд, если я могу избежать этого.

1 Ответ

1 голос
/ 03 ноября 2011
def save = {
    def schedInstance = new Schedule(params['schedule'])
    params['schedule?.step'].each{stepXml->
        schedInstance.addTo(new step(stepXml)
    }
}

Не проверено, но я делал нечто подобное раньше. Я отредактирую это по мере необходимости, как только у меня будет возможность проверить это.

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