Grails:如何在多对多映射中查询对象?
Posted
技术标签:
【中文标题】Grails:如何在多对多映射中查询对象?【英文标题】:Grails: How to query objects in many to many mapping? 【发布时间】:2011-09-13 02:11:29 【问题描述】:您好,我有以下域类。
class Student
int age
static hasMany = [courses:Course]
class Course
String name
static hasMany = [students:Student]
我想找到年龄为 7 岁的正在学习课程的学生(id 为 1)。
我可以使用动态查找器或标准生成器或 HQL 来做到这一点吗?
我不想做以下事情,因为它让所有学生都如此低效:
def course = Course.get(1);
course.students.findAll it.age == 7
【问题讨论】:
【参考方案1】:def studs = Student.withCriteria
eq('age', 7)
courses
eq('id', 1)
位于GORM doc,“条件/查询关联”部分。
【讨论】:
谢谢,这就是我要找的【参考方案2】:您可以使用动态查找器:
def students = Student.findByCourseAndAge(Course.load(1), 7)
通过使用load()
而不是get()
,您可以避免检索整个 Course 实例而只需引用其 ID。
另一种选择是 HQL:
def students = Student.executeQuery(
'from Student s where s.course.id = :courseId and s.age = :age',
[courseId: 1, age: 7])
【讨论】:
你好,伯特。学生没有“课程”字段,它有“课程”。我不能做 findByCourse,我可以做 findByCourses,但我可以比较集合。以上是关于Grails:如何在多对多映射中查询对象?的主要内容,如果未能解决你的问题,请参考以下文章
Django - 查询列表中的任何项目在多对多字段中的任何对象
Django ORM:构造查询,该查询将在多对多字段的最后位置的对象中的字段上查找匹配项