Grails Hql 一对多关联查询

maa*_*aaz 2 grails groovy hibernate hql grails-orm

我有一个培训领域课程

    class Training {

     String type
     Date createdOn
     Date modifiedOn

    static belongsTo = [course: Course]
    static hasMany = [attachments: Attachment]
  }
Run Code Online (Sandbox Code Playgroud)

我有课程域类

     class Course {

          String name

          static hasMany = [trainings: Training, tracks: Track]
          static belongsTo = Track
   }
Run Code Online (Sandbox Code Playgroud)

和跟踪域类

    class Track {
        String name 
    }
Run Code Online (Sandbox Code Playgroud)

现在我有一个过滤器(这是 gsp 页面,它将 id 作为参数发送到控件),它根据课程和轨迹选择训练

现在说 params.courseId = 1 和 3

所以我写了查询

   def query = "FROM Training AS t WHERE  t.course.id IN (1,3)"
   trainingList = Training.findAll(query)
Run Code Online (Sandbox Code Playgroud)

这是正确的,我得到了所需的输出。

现在当我说我有轨道 id 时,params.trackId = 1,2

    def query = "FROM Training AS t WHERE  t.course.tracks.id IN (1,2)"
    trainingList = Training.findAll(query) 
Run Code Online (Sandbox Code Playgroud)

这是行不通的..如何在我上面提到的关联中编写正确的查询。

Vic*_*nko 6

不同之处在于您正在查询一对多关联,即“多”方。

假设的 HQL:

def query = "FROM Training AS t WHERE exists " +
  "(from t.course.tracks AS tr where tr.id IN (1,2))"
Run Code Online (Sandbox Code Playgroud)

或标准:

def trainings = Training.withCriteria {
   course {
     tracks {
       in('id', [1, 2])
     }
  }
}
Run Code Online (Sandbox Code Playgroud)