Как я могу иметь дополнительные отношения один-к-одному в GORM? - PullRequest
5 голосов
/ 21 февраля 2012

У меня есть 2 объекта, ObjectA и ObjectB.

Когда создается ObjectA, ObjectB не существует (а не может из-за отсутствия данных).

После создания ObjectB к нему должен быть прикреплен соответствующий ObjectA , если существует соответствующий . Если нет подходящего ObjectA, то новый ObjectB просто не подключен к нему.

Итак, все ObjectA экземпляры будут в конечном итоге присоединяться к ObjectB, но не все ObjectB экземпляры будут иметь ObjectA.

По сути, я ищу GORM для создания таблиц базы данных следующим образом:

ObjectA
- Id (NotNull, unique)
- ObjectB_Id[FK: ObjectB.Id] (unique)

ObjectB
- Id (NotNull, unique)

Как я могу собрать для этого доменные классы GORM?

Я пробовал почти каждую комбинацию hasOne, belongsTo, необработанных свойств, nullable: true и unique: true ограничений, которые я могу себе представить, но у меня должно быть отсутствует одно. Не похоже, что это особенно нечетный сценарий, поэтому должен быть каким-то образом для этого.

1 Ответ

5 голосов
/ 21 февраля 2012

Как это часто бывает, объединение моих мыслей в вопрос приводит меня к решению:

Class ObjectA {
    ObjectB objectB

    static constraints = {
        objectB nullable: true, unique: true
    }
}

Class ObjectB {
    static belongsTo = [objectA: ObjectA]

    static constraints = {
        objectA nullable: true
    }
}

Единственный улов с этим, который я не могу обойти, - это то, что можноустановите ObjectB.objectA на ObjectA, который уже связан с ObjectB.При сохранении новой ассоциации GORM просто не сохраняет ассоциацию.Не выдается никаких ошибок, а извлечение нового ObjectB из базы данных оставляет свойство objectA неустановленным.

Добавление unique: true к ограничениям objectA в классе ObjectB не помогаетили.Вместо молчаливого сбоя выдается ошибка, указывающая, что проверка уникальности не удалась из-за неустановленного параметра.

...