我有一个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')
}
}
}
最佳答案
see 'namedQueries' from Grails Doc
//获得一项最新法案
def recentAct = Act.filterOnStatus(statusName).get()
加:
HQL
"select s1.act from Status as s1 \
where s1.name = :statusName \
and s1.setDate = (select max(s0.setDate) from s1.act.status s0)"
NamedQuery
listByStatus { statusName ->
createAlias('status', 's1')
eq 's1.name', statusName
eq 's1.setDate', new DetachedCriteria(Status).build{ projections { max('setDate')} eqProperty('act','s1.act') }
}
关于grails - Grails按另一个域的属性过滤域类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19130586/