grails - 如何编写涉及三个域的相对简单的条件查询?

标签 grails gorm criteria

仅出于背景考虑,让我们拥有以下三个域类:

class Group {
    Long id
    Person person
}

class Person {
    Long id
    Country country
    String name
}

class Country {
    Long id
}

因此,考虑到这些类,为我提供了一个Group对象的ID以及一个Country对象的ID。我想基于这两个获得Person对象的列表。

看起来相对简单,但是我不熟悉标准查询,因此我很难弄清楚自己在做什么错。这是我到目前为止所拥有的:
def c = Group.createCriteria()
def names = c.list (order: "asc") {
    createAlias('person', 'p')
    createAlias('p.country', 'c')
    and {
        eq ('c.id', Long.valueOf(countryId))
        eq ('id', groupId)
    }
    projections {
        property('p.name')
    }
}

当然,这是错误的,因为它会引发错误。有人可以让我知道我做错了吗?

谢谢你的帮助!

最佳答案

static def searchPersons(Map params) {
    return Group.createCriteria().list(params, {
        if(params.groupId) {
            eq('id', params.groupId.toLong())
        }
        person {
            order('name')
            if(params.countryId) {
                country {
                    eq('id', params.countryId.toLong())
                }
            }
        }
        projections {
            property('person')
        }

    })
}

不过,最好在您的域上添加必要的关联(hasMany等)。

关于grails - 如何编写涉及三个域的相对简单的条件查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406998/

相关文章:

grails - 命令对象中的 java.lang.NullPointerException

hibernate - 从Grails 1.3.7迁移后,在使用Grails 2.3.2和Hibernate 3.6.10.3创建的SQL上,基类被添加为tablePerHiearchy为false的子类。

java - 从 Criteria 或 : Dynamic WHERE clause with dynamic columns in select 获取 WHERE 子句作为 HQL 字符串

java - JPA 多对多查询

java - JPA Criteria API - 设置连接并从连接实体中获取数据

version-control - 解决Grails项目的插件的路径/依赖关系

java - 自定义类型/转换器与 Hibernate 的 Transformers.aliasToBean 结合使用

testing - 如何测试 grails Criteria 查询?

grails - 在Grails的GORM中添加更改监听器

grails - 如何在自定义Grails验证器中引用另一个属性?