わかりました、道に迷ってしまいました... ドメイン クラスStudent
とCourse
. クラスCourse
が設定されます。テーブルに新しいコースを追加しません。学生は多くのコースを持つことができ、コースは多くの学生を持つことができます。私が持っているものを見て、私を正しい道に導いてください。
class Student {
String fullName
static belongsTo = [schools: School]
static hasMany = [courses:Course]
static mapping = {
table "STUDENT"
courses joinTable: "STUDENT_COURSE", key: "COURSE_ID"
}
class Course {
String courseName
static hasMany = [students:Student]
static belongsTo = Student
static mapping = {
students joinTable: "STUDENT_COURSE", key: "STUDENT_ID"
}
これで、新入生情報を入力すると、ビューが爆破されないので、それでいいのですが、学生情報は保存されますが、joinTableSTUDENT_COURSE
は空白です。どういうわけか、Studnet とコースの PK ID を joinTable に渡す必要があることはわかっていますが、方法と場所がわかりません。(studentController の下に入っていdef save()
ますか?)
また、どの.gsp
ように見えるでしょうか? これは私が持っているものであり、私はそれが間違っていることを知っています.(id="coursetags" is jQuery autocomplete id)
私の_form.gsp
入力部分。
<div class="fieldcontain ${hasErrors(bean: studentInstance, field: 'courses', 'error')} required" >
<label for="course">
<g:message code="student.courses.label" default="Course" />
<span class="required-indicator">*</span>
</label>
<g:textField name="course" id="coursetags" required="" value="${course?.course}"/>
私の結果は次のようになります。
STUDENT COURSE STUDENT_COURSE
ID FULLNAME ID COURSENAME STUDENT_ID COURSE_ID
1 John Doe 1 English101 1 1
2 Jane Smith 2 Science101 1 2
2 2
私はこれらのサイトを分析しようとしています...
http://chrisbroadfoot.id.au/2008/07/19/many-to-many-relationship-mapping-with-gorm-grails/
https://grails.github.io/grails-doc/3.0.x/guide/GORM.html#manyToMany
https://grails.org/wiki/Many-to-Many%20Mapping%20without%20Hibernate%20XML
ありがとうございました。
編集1
私のコントローラー
class studentController {
@Transactional
def save(Student studentInstance) {
if (studentInstance == null) {
notFound()
return
}
if (studentInstance.hasErrors()) {
respond studentInstance.errors, view:'create'
return
}
def courseID = Course.findByCourseLike(params.course)
studnetInstance.save flush:true
request.withFormat {
form multipartForm {
flash.message = message(code: 'default.created.message', args: [message(code: 'student.label', default: 'Student'), studnetInstance.id])
redirect studentInstance
}
'*' { respond studentInstance, [status: CREATED] }
}
def sID = studentInstance.id //When I println under these, they print the right id numbers.
def cID = courseID.id
student.addToCourses(cID).save() //This is the part that I don't understand.
//I get error saying No such property: student for class.
}
}
EDIT 2
だから、私はいくつかの研究を考えていました.... SQLを直接使用してSTUDENT_COURSE
テーブルを結合しない限り、別のドメインクラスを作成し、とクラスのStudentCourse
両方を にマップする必要があります。あれは正しいですか?Student
Course
StudentCourse