grails - Grails按另一个域的属性过滤域类

标签 grails hibernate-criteria named-query

我有一个Grails应用程序,并想使用named query为我的域类创建过滤器。
我有ActStatus域,StatusNameEnum:

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/

相关文章:

grails 3.1.3 具有弱引用 setter 的多个数据源不起作用

java - Hibernate 对多个条件的条件限制

Hibernate Restrictions.in 与 Disjunction

java - JPA:对查询键使用 anyOf() 无效

Grails:GORM 多对多和一对多关系映射

grails - 在Grails或标记中继承域类会做什么?

java - JPA 命名查询无法使用 Hibernate 解析

java - Hibernate Named Queries 是真正意义上的预编译吗?

grails - 相对 URL 到服务器路径的转换 - Grails

jpa-2.0 - 在 JPA 中,为什么 CriteriaBuilder 让我在不相关的类型之间构建不健全的谓词?