Сохранение ссылки через принадлежит - PullRequest
1 голос
/ 19 сентября 2011

Я делаю сценарий, используя некоторые уже созданные (не мной) классы доменов из grails.

class Person extends OAP {
  static hasMany = [addresses: Address]
(...)
}

class Address {
  static belongsTo = [oap: OAP]
(...)
}

класс OAP не имеет ссылки на Address.

Итак, я пытался сделать:

p.save()
a.oap = p
println a.oap
a.save()

с p, обозначающим Person и с адресом существа, но, хотя он печатает правильного человека на консоли, ссылка на таблицу адресов не сохраняется (oap_id остается нулевым)

P.S .: Возможно, это не лучшая установка отношений в Grails, но это то, с чем я должен работать

Ответы [ 3 ]

1 голос
/ 19 сентября 2011

Я понятия не имею, как GORM будет вести себя в этой ситуации, потому что вы по существу вошли в эту странную зону, где у вас есть однонаправленный hasMany на Person, что приводит к SAVE-UPDATE каскадному поведению от Person и NONE на Адрес. Кроме того, у вас также есть однонаправленная связь «один к одному» между Person и OAP, что приводит к каскадному поведению ALL на стороне OAP и NONE на стороне адреса. Так что я не уверен, чего здесь ожидать. Вам необходимо исправить отношения либо:

  • Сделай так, чтобы ОАП, а не Человек hasMany = [address:Address]
  • Сделай так Адрес belongsTo = [person:Person]

Или, дайте дополнительное объяснение того, что вы пытаетесь сделать в ваших отношениях, и мы можем пойти дальше.

1 голос
/ 19 сентября 2011

Попробуйте p.addToAddresses(a), а затем p.save().Это должно сохранить как p, так и a.Смотри http://grails.org/doc/latest/guide/5.%20Object%20Relational%20Mapping%20%28GORM%29.html#5.2.4%20Sets,%20Lists%20and%20Maps

0 голосов
/ 30 января 2014

Пожалуйста попробуйте с этим, это решило мою проблему

p.addToAddresses(a);
p.save(flush:true)
...