gpt4 book ai didi

grails - (未保存的)groovy 中多对多关系中的数据

转载 作者:行者123 更新时间:2023-12-02 14:07:36 29 4
gpt4 key购买 nike

我的数据域:

 class Course{
List teacherCourse
static hasMany = [courseByMultipleTeacher:TeacherCourse]
}

class Teacher{
String name
List teacherForCourses
static hasMany = [teacherForCourses:TeacherCourse]
}

class TeacherCourse{
Course course
Teacher teacher
static mapping={
id composite: ['teacher','course']
}

}

在我的 Controller 中:

save(){
Teacher teacherInst = new Teacher()
teacherInst.name = "T1"
teacherInst.save(flush:true)

Course c1 = Course.findById(3)
Course c2 = Course.findById(4)

def teacherCourseA = new TeacherCourse(teacher:teacherInst, course:c1)
def teacherCourseB = new TeacherCourse(teacher:teacherInst, course:c2)
teacherInst.addToTeacherCourse(teacherCourseA)
teacherInst.addToTeacherCourse(teacherCourseB)
teacherInst.save(flush:true)

//Output is: (unsaved) . Why?
println(Teacher.findById(teacherInst.id).teacherForCourses.get(0));

}

输出net.school.teacher.TeacherCourse : (未保存)

Teacher 和 TeacherCourse 保存在数据库 (PostgreSQL) 中。每当我尝试从列表中检索值时,我都会收到(未保存)消息。我不确定为什么会这样。任何帮助,将不胜感激。我查了这个link , 但无法解决问题。

最佳答案

我认为 TeacherCourse 类的 ID 存在问题 - GORM(Hibernate)需要它自己的单列 ID 来处理持久上下文中的实例,在 ORM 中制作复合 ID 从来都不是一个好主意。

让 GORM 有他的 id 并指定类(class)和老师一起是唯一的:

class TeacherCourse {
Course course
Teacher teacher

static mapping = {
course unique: 'teacher'
}
}

在这里你可以检查 net.school.teacher.TeacherCourse : (unsaved) 当域实例的 id 为 null 时从 toString() 返回:

http://jira.grails.org/browse/GRAILS-8072

关于grails - (未保存的)groovy 中多对多关系中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21518706/

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