Как обработать Many-Many В Grails без belongsTo?

Я должен создать many-many отношения в Grails.

У меня есть домен "Question" и домен "Tag". Вопрос может иметь 0 или больше тегов. Тег может иметь 0 или больше Вопросов.

Если я поместил "hasMany" на каждого, примыкает, он дает мне ошибку при высказывании, что мне нужен "belongTo" где-нибудь. Однако добавление belongsTo означает, что владелец должен существовать...

Как я сказал, Тег мог иметь 0 вопросов, и Вопрос мог иметь 0 тегов. Нет никакого понятия о владельце, это - many-many!

Что я, как предполагается, делаю?

8
задан Nathan H 5 May 2010 в 17:13
поделиться

4 ответа

Если вас больше всего беспокоит каскадное удаление, вы можете взглянуть на 5.5.2.9 в документации grails, чтобы вручную отключить его. для отображения.

2
ответ дан 5 December 2019 в 20:14
поделиться

Я не пробовал, но думаю, что свойство mappedBy можно использовать для решения этой проблемы.

0
ответ дан 5 December 2019 в 20:14
поделиться

Проверьте Taggable Plugin.

Кажется, он решает проблему, с которой вы столкнулись, и вы можете посмотреть исходный код, если хотите увидеть, как они смоделировали отношения. BTW этот плагин был изначально создан Graeme Rocher, который является ведущим разработчиком Grails.

0
ответ дан 5 December 2019 в 20:14
поделиться

вы можете это сделать (см. Код ниже). но имеет ли смысл иметь вопросительный тег без вопроса и тега?

    package m2msansbt

    class Question {
        String toString() { return name }
        String name
        static hasMany=[questionTags:QuestionTag]
        static constraints = {
        }
    }
    package m2msansbt

    class Tag {
        String toString() { return name }
        String name
        static hasMany=[questionTags:QuestionTag]
        static constraints = {
        }
    }
package m2msansbt

class QuestionTag {
    Question question
    Tag tag
    static QuestionTag link(Question question,Tag tag) {
        QuestionTag questionTag=QuestionTag.findByQuestionAndTag(question,tag)
        if (!questionTag) {
            questionTag = new QuestionTag()
            question?.addToQuestionTags(questionTag)
            tag?.addToQuestionTags(questionTag)
            questionTag.save() 

        }
        return questionTag
    }
    static void unlink(Question question,Tag tag) {
        QuestionTag questionTag=QuestionTag.findByQuestionAndTag(question,tag)
        if (questionTag) {
            question?.removeFromQuestionTags(questionTag)
            tag?.removeFromQuestionTags(questionTag)
            questionTag.delete()
        }
    }
    static constraints = {
    }
}

 import m2msansbt.*
 class BootStrap {

         def init = { servletContext ->
            Question q1=new Question(name:'q1')
            Tag t1=new Tag(name:'t1')
            Tag t2=new Tag(name:'t2')
            q1.save()
            t1.save()
            t2.save()
            QuestionTag q1t1=QuestionTag.link(q1,t1)
            q1t1.save()
            QuestionTag q1t2=QuestionTag.link(q1,t2)
            q1t2.save()
            q1.save()
            t1.save()
         }
         def destroy = {
         }
    }
6
ответ дан 5 December 2019 в 20:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: