gpt4 book ai didi

grails - 如何在没有belongsTo的情况下处理Grails中的多对多?

转载 作者:行者123 更新时间:2023-12-04 07:45:52 26 4
gpt4 key购买 nike

我需要在 Grails 中创建多对多关系。

我有一个“问题”域和一个“标签”域。
一个问题可以有 0 个或多个标签。一个标签可以有 0 个或多个问题。

如果我在每一边都放一个“hasMany”,它会给我一个错误,说我需要一个“belongTo”。
但是,添加一个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 = {
}
}

关于grails - 如何在没有belongsTo的情况下处理Grails中的多对多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com