У меня есть приложение 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
в запрос, но, похоже, это не сработало.
Буду признателен за любую помощь.
EDIT: Проблема была решена таким образом:
filteronStatus {
createAlias('status', 's1')
eq 's1.name', s
eq 's1.setDate', new DetachedCriteria(Status).build {
projections {
max('setDate')
eqProperty('act', 's1.act')
}
}
}
setDate
больше этой даты, статус находится в вашем последнем диапазоне. - person rxn1d   schedule 02.10.2013Act
имеет несколько статусов. КаждыйStatus
имеет дату (setDate
), когда он был установлен. Самый последний статус означаетStatus
с самым последнимsetDate
среди всех статусов. - person TulaGingerbread   schedule 02.10.2013