我需要在Grails中创建一个多对多的关系.
我有一个"问题"域和一个"标记"域.一个问题可以有0个或更多标签.标签可以包含0个或更多问题.
如果我在每一侧都放了一个"hasMany",它会给我一个错误,说我需要一个"belongsTo".但是,添加belongsTo意味着所有者必须存在...
就像我说的,一个标签可以有0个问题,一个问题可以有0个标签.没有所有者的概念,这是多对多的!
我应该做些什么?
你可以这样做(请参阅下面的代码).但是有一个带有问题和标签的问号标签是否有意义?
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 = { } }