只从Grails中的hasMany中获取ID?

时间:2015-12-01 11:56:41

标签: grails

我知道我可以在Grails中做Parent.childId,但有什么类似我只能为hasMany中的每个孩子加载id(代理)吗?即,类似于Parent.childrenIds

在我的例子中,hasMany由joinTable映射。

2 个答案:

答案 0 :(得分:2)

您可以使用projection执行此操作。 e.g。

def result = Child.createCriteria().list {
    projections {
        property('id')
    }
    eq ('parent', parent)
}

这将只返回子对象的id。

答案 1 :(得分:0)

记住joinTable

def getChildIds(parentId) {
    Child.withSession { session -> 
        def sql = new Sql(session.connection())    
        sql.rows(
            'select pc.child_id from parent_child pc where pc.parent_id = :parentId',
             [parentId: parentId]
        ).collect{ it.child_id }
    }
}

这适用于joinTable映射为:

class Parent {

    static mapping = {
        childs joinTable: [name: 'parent_child', column: 'child_id', key: 'parent_id']
    }
    ...

它并不漂亮,但我认为这是考虑情况和要求的最佳方式。