Grails / GORM: создание необязательных отношений «один-к-одному»

Я разрабатываю систему, в которой сообщения / обсуждения между пользователями могут быть обновлены, чтобы стать тикетами. В одном конкретном месте я пытаюсь создать необязательные индивидуальные отношения, но у меня возникают определенные проблемы. Краткая версия сущностей, находящихся в центре внимания, приведена ниже.

Правила:

  1. Пост может стать Билетом, если требуется. (необязательно)
  2. В билете должна быть почта. (обязательно)

Post.groovy

class Post {

        String title
        String description
        String postedBy

        Ticket ticket

        static hasMany = [comments: Comment]

    static constraints = {
        title(blank:false)
        description(blank:false)
        postedBy(blank:false)
        ticket (nullable:true,unique:true)
    }
}

Ticket.groovy

class Ticket {

        String title
        String description
        String postedBy

        Post post

        static hasMany = [responses: Response]

        static constraints = {
                title(blank:false)
                description(blank:false)
                postedBy(blank:false)
                post (nullable:false,unique:true)
        }

}

В некоторой степени это работает. Я могу:

  1. Создать сообщение, оставив атрибут тикета нулевым. Если и когда сообщение будет обновлено до тикета
  2. , я могу явно установить атрибут тикета поста, чтобы он указывал на родительский тикет.

Однако это сопоставление не применяется на уровне домена. Это оставляет место для ситуации, когда Ticket1 указывает на Post1, а Post1 указывает на Ticket2.

Я попытался использовать статический hasOne = [post: Post] в классе Ticket , но позже узнал, что он требует наличия static ownTo = [ticket: Ticket] в классе Post , и это становится обязательным отношением один-к-одному, чего я не ищу.

Есть ли способ добиться этого необязательного сопоставления 1 к 1 в этом сценарии? Любые указатели были бы наиболее полезны.

6
задан cdeszaq 21 February 2012 в 17:55
поделиться