Grails:如何查询多对多映射中的对象?

发布于 2024-11-15 06:12:27 字数 382 浏览 2 评论 0原文

您好,我有以下域类。

class Student {
   int age
   static hasMany = [courses:Course]
}

class Course {
   String name
   static hasMany = [students:Student]
}

我想找到参加课程(ID 1)、年龄为 7 岁的学生。

我可以使用动态查找器、标准构建器或 HQL 来实现这一点吗?

我不想执行以下操作,因为它使所有学生加载效率低下:

def course = Course.get(1);
course.students.findAll{ it.age == 7 }

Hello I have the follwing domain classes.

class Student {
   int age
   static hasMany = [courses:Course]
}

class Course {
   String name
   static hasMany = [students:Student]
}

I want to find the Students taking Course (with id 1), with age 7.

Could I do that with dynamic finder or criteria builder or HQL?

I do not want to do following as it load all students so inefficient:

def course = Course.get(1);
course.students.findAll{ it.age == 7 }

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

枕花眠 2024-11-22 06:12:27
def studs = Student.withCriteria {
  eq('age', 7)
  courses {
    eq('id', 1)
  }
}

它位于 GORM 文档的“条件/查询关联”部分。

def studs = Student.withCriteria {
  eq('age', 7)
  courses {
    eq('id', 1)
  }
}

It's in GORM doc, section "Criteria/Querying Associations".

归属感 2024-11-22 06:12:27

您可以使用动态查找器:

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])

You can use a dynamic finder:

def students = Student.findByCourseAndAge(Course.load(1), 7)

By using load() instead of get() you avoid retrieving the whole Course instance and just reference its id.

Another option is HQL:

def students = Student.executeQuery(
   'from Student s where s.course.id = :courseId and s.age = :age',
   [courseId: 1, age: 7])
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文