我正在Grails中创建一个REST服务来接受来自python脚本的数据。 python脚本生成对象图的XML表示,并将其提交给控制器。事情对我的平面对象很有用,但我无法弄清楚如何处理域对象包含一组子对象的情况。出于无关的原因,我的DOA层是纯Java JPA。
例如,我的域类(离开getter / setters /等):
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'])
...
}
步骤属性永远不会被填充。如果我将params转储到日志中,则步骤数据全部被卡在一起(在上面的示例中,它将产生步骤:“BarBlatz”
我必须做一些非常错误的事情。我想这是一项常见的任务。我能找到的关于嵌套对象的一切都与命令对象有关。如果可以避免,我不想在命令对象中复制我的域对象代码。
答案 0 :(得分:1)
def save = {
def schedInstance = new Schedule(params['schedule'])
params['schedule?.step'].each{stepXml->
schedInstance.addTo(new step(stepXml)
}
}
未经测试,但之前我做过类似的事情。 一旦我有机会测试它,我会根据需要编辑它。