如何获取grails中的对象列表?

时间:2014-08-12 06:12:40

标签: grails

首先,我是grails的新手。

现在我有两个域对象,如下所示:

class ApproverGroup{
    Date dateCreated
    Date lastUpdated
    static hasMany=[corporateHouseUser :CorporateHouseUser]
    static constraints = {
        corporateHouseUser nullable: false
    }
}

class CorporateHouseUser implements Serializable {

    CorporateHouse corporateHouse
    User user

    String personName

    String designation

    TransactionVelocity transactionVelocity

    long groupId

    static constraints = {
        personName nullable: false, blank: false
        transactionVelocity nullable: true
    }

    static auditable = true

    static mapping = {
        id composite: ['corporateHouse', 'user']
    }

    String getCreator() {
        return personName
    }
}

我需要做的是从公司住宅ID中获取属于公司住宅的批准者组列表以及公司住宅用户。 在我的ApproverGroupService中,我创建了一个接受公司住宅ID的方法,我希望此方法返回一个批准者组列表。

我想知道如何进行以下查询?

def approverGroupList= ApproverGroup.executeQuery("Select * from ApproverGroup as a where a.corporateHouseUser in (Select * from CorporateHouseUser as u where u.corporateHouse.id = :corporateHouseId)   ",[corporateHouseId:corporateHouseId
        ]);

我该怎么做?

2 个答案:

答案 0 :(得分:1)

尝试使用条件获取它。

def approverGroups = ApproverGroup.withCriteria() {
         createAlias('corporateHouseUser','corporateHouseUser')
         eq('corporateHouseUser.id', corporateHouseId)
    }

答案 1 :(得分:1)

我会避免使用createAlias,因为它是特定于hibernate的,并且在单元测试中效果不佳。如果您要加入多对多,则需要使用listDistinct来防止在结果中获得重复的ApproverGroup条目。

ApproverGroup.createCriteria().listDistinct {
    corporateHouseUser {
        eq 'id', corporateHouseId
    }
}