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)
这是行不通的..如何在我上面提到的关联中编写正确的查询。
不同之处在于您正在查询一对多关联,即“多”方。
假设的 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)
| 归档时间: |
|
| 查看次数: |
3838 次 |
| 最近记录: |