3

次のドメインクラスの階層があるとしましょう。

class School {
   String name
   static hasMany = [teachers: Teacher, students: Student]
}

class Teacher {
   String name
   static belongsTo = [school: School]
   static hasMany = [students: Student]
}

class Student {
   String name
   static belongsTo = [school: School, teacher: Teacher]
}

私は学校、教師、生徒を救うために2つの異なる方法を試しました。

試行1:

def school = new School(name: "School").save()
def teacher = new Teacher(name: "Teacher", school: school).save()
def student = new Student(name: "Student", school: school, teacher: teacher).save(flush: true)

正しく保存されているように見えますが、実行すると次のようになります。

println(school.students*.name)

nullを出力します。

そこで、別のアプローチを試すことにしました。

試行2:

def school = new School(name: "School")
def teacher = new Teacher(name: "Teacher")
def student = new Student(name: "Student")
teacher.addToStudents(student)
school.addToStudents(student)
school.addToTeachers(teacher)
school.save(failOnError: true, flush: true)

ここで、保存のいくつかの組み合わせを試しましたが、必須フィールドがnullであるというエラーが常に発生しました。この場合、エラーは

JdbcSQLException:列「TEACHER_ID」にNULLは許可されていません

誰かが私の試みが失敗した理由と、データを作成するための適切な方法を説明していただければ幸いです。

4

1 に答える 1

5
def school = new School(name: "School").save(flush: true)
def teacher = new Teacher(name: "Teacher")
school.addToTeachers(teacher)
teacher.save(flush: true)
def student = new Student(name: "Student", teacher: teacher)
school.addToStudents(student)
于 2012-08-31T22:30:29.163 に答える