我有一个训练领域类
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/