Проблем с класовете на домейни на Grails GORM с меки съединения

Съпоставих две таблици на Domain класове, да речем:

  • Parent таблица, която hasMany от таблицата Child.
  • Child маса, която belongsTo маса Parent.

Искам да отбележа, че няма конкретно foreign keys, изрично декларирано в базата данни, по-скоро е декларирано в картографирането на GORM. Но тук е уловката: има специални типове Child, които са осиротели - тоест нямат техните Parent таблици. Всеки път, когато имам достъп до тези сираци чрез валиден Child.findById(), се показва грешка:

Message: No row with the given identifier exists

който не присъства при достъп до не-сирак Child. Вече бях подредил тези Domain таблици по такъв начин, че всеки път, когато Child се анализира като JSON, той ще има свойство, наречено parents, което е масив от Parent и обратното. Вече работи - с изключение на случая на тези сираци.

Как трябва да поправя това? Трябва ли да премахна тяхното GORM съединение, тъй като те всъщност не са съвместни от страната на базата данни?


person Gideon    schedule 10.12.2015    source източник


Отговори (1)


Предполагам, че имате класове на домейн, които изглеждат така:

class Parent {
    static hasMany = [children: Child]
}

class Child {
    static belongsTo = [parent: Parent]
}

Това е двупосочна асоциация един към много. GORM очаква дъщерната таблица да съдържа външен ключ към родителя и детето може да съществува само ако има родител.

Един от начините да позволите на деца сираци е да направите както предложихте: премахнете асоциациите на gorm. Друг начин е да премахнете belongsTo, за да създадете еднопосочна асоциация. Така едно дете може да съществува без родител.

person Emmanuel Rosa    schedule 10.12.2015