Nat*_*n H 8 grails many-to-many
我需要在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 = {
}
}
Run Code Online (Sandbox Code Playgroud)