Как описано в http://n4.nabble.com/Grails-Data-Binding-for-One-To-Many-Relationships-with-REST-tp1754571p1754571.html Я пытаюсь автоматически связать мои REST-данные.
Теперь я понимаю, что для связей «один ко многим» карта, необходимая для привязки данных, должна иметь список идентификаторов множества сторон, например:
[propName: propValue, manyAssoc: [1, 2]]
Однако я получаю это исключение
Executing action [save] of controller [com.example.DomainName] caused exception: org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException occurred calling getter of com.example.DomainName.id; nested exception is org.hibernate.PropertyAccessException: IllegalArgumentException occurred calling getter of com.example.DomainName.id
Однако, еще более странным является действие обновления, которое генерируется для контроллера. Там у нас есть привязка данных вот так:
domainObjectInstance.properties = params['domainObject']
Но, и это действительно странная вещь, params ['domainObject'] равен нулю! Он нулевой, потому что все поля domainObject передаются непосредственно в самой карте параметров. Если я изменю вышеприведенную строку на
domainObjectInstance.properties = null
domainObject все еще обновляется! Почему это происходит и что более важно, как я могу автоматически связать свой входящий XML, если он приходит в этом формате (проблема в связях «один ко многим»):
<product>
<name>Table</name>
<brand id="1" />
<categories>
<category id="1" />
<category id="2" />
</categories>
</product>