hibernate - 一对多关联的 Grails Hql 查询

标签 hibernate grails groovy hql grails-orm

我有一个训练领域类

    class Training {

     String type
     Date createdOn
     Date modifiedOn

    static belongsTo = [course: Course]
    static hasMany = [attachments: Attachment]
  }

我有类(class)域类

     class Course {

          String name

          static hasMany = [trainings: Training, tracks: Track]
          static belongsTo = Track
   }

和跟踪域类

    class Track {
        String name 
    }

现在我有一个过滤器(它是将 id 作为参数发送给控件的 gsp 页面),它根据类(class)和轨迹选择培训

现在说 params.courseId = 1 和 3

所以我写查询

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

这是正确的,我得到了想要的输出。

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

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

这是行不通的..如何在我有上述关联的地方编写正确的查询。

最佳答案

区别在于您查询的是一对多关联,即“多”方。

假定的 HQL:

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

或标准:

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

关于hibernate - 一对多关联的 Grails Hql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12401288/

相关文章:

java - 在 hibernate 中使用 @idclass 的复合键

java - @Transactional 注释与 saveAndFlush 一起使用?

java - Hibernate:@ManyToOne(fetch = FetchType.LAZY) 不适用于非主键引用列

grails - GORM 使用 hasMany 映射同一类的两个属性

inheritance - 如何在@Immutable 类中设置父类(super class)属性?

regex - 在 Groovy 中查找小写单词

java - @OneToOne/@ManyToOne/@ManyToMany 的非拥有实体方

grails - Ra-在 Grails 应用程序中对更改后的用户进行身份验证

javascript - Grails 刷新谷歌图表

grails - 在 Grails 中将 xsl 文件放在哪里,以及如何获取路径