我有一个 Grails 应用程序,想使用named query
.
我有域Act
并且Status
,StatusName
是一个Enum
:
class Act {
static hasMany = [status : Status]
}
class Status {
Date setDate
StatusName name
static belongsTo = [act : Act]
}
我想过滤其最新状态名称等于特定名称的行为。
现在我有这个代码Act
:
static namedQueries = {
filterOnStatus { StatusName s ->
status {
order('setDate', 'desc')
eq 'name', s
// I need only first Status, with most recent setDate
// among all Statuses of that Act
}
}
}
但这会过滤所有具有特定名称状态的行为,而不仅仅是最近的行为。我试图进行maxResult 1
查询,但它似乎不起作用。
任何帮助,将不胜感激。
编辑:问题就这样解决了:
filteronStatus {
createAlias('status', 's1')
eq 's1.name', s
eq 's1.setDate', new DetachedCriteria(Status).build {
projections {
max('setDate')
eqProperty('act', 's1.act')
}
}
}