我有这些域类:
class Person{
String username
}
class Course {
String code
static hasMany = [events:Event]
}
class Event {
Long id
String name
(...)
static belongsTo = [course:Course, parallel:Parallel]
static hasMany = [teachers: Person, students: Person,bought: Exchange, sold: Exchange]
}
我想要做的是找到与学生和课程相关的所有活动。我做了这个查询:
(...)
println "User: ${person.username}"
println "Course: ${course.code}"
Set<Person> persons = []
persons.add(person)
def events = Event.findAllByCourseAndStudents(course, persons)
}
但是这给了我一个错误ERROR util.JDBCExceptionReporter - Parameter "#2" is not set; SQL statement:
我在这里缺少什么?
答案 0 :(得分:1)
查询Students
中第二个参数的问题在于它是1:M(一对多)关联,并且不支持使用动态查找器查询这些关联。
查看GORM / Grails支持的各种类型查询的this quick overview,以便更好地了解您可以使用哪种选项以及何时使用它们。
正如您所看到的,使用criteria确实是您在这种情况下所需要的:
def events = Event.createCriteria().list() {
eq('course', course)
students {
eqId(person.id)
}
}
}
以上内容仅与单个人匹配,但您可以进一步修改此选项以使用您想要的人员列表。我将把这个练习留给你,这样你就可以熟悉如何创建和使用标准。