您好我有以下域类。
class Student {
int age
static hasMany = [courses:Course]
}
class Course {
String name
static hasMany = [students:Student]
}
我想找到7岁的学生参加课程(身份1)。
我可以使用动态查找器或条件构建器或HQL吗?
我不想这样做,因为它加载所有学生效率低下:
def course = Course.get(1);
course.students.findAll{ it.age == 7 }
答案 0 :(得分:22)
def studs = Student.withCriteria {
eq('age', 7)
courses {
eq('id', 1)
}
}
位于GORM doc,“查询关联”部分。
答案 1 :(得分:-2)
您可以使用动态查找器:
def students = Student.findByCourseAndAge(Course.load(1), 7)
使用load()
代替get()
,您可以避免检索整个课程实例,只需引用其ID。
另一个选择是HQL:
def students = Student.executeQuery(
'from Student s where s.course.id = :courseId and s.age = :age',
[courseId: 1, age: 7])