Smrita
Smrita

Reputation: 1279

How do I fetch a list of objects in grails?

First of all I am new to grails.

Now I have two domain objects as follows:

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

and

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
    }
}

What I need to do is fetch a list of approver group that belongs to a corporate house along with corporate house users from corporate house id. In my ApproverGroupService I have created a method that accepts corporate house id now I want this method to return a list of Approver groups.

I am wondering how to make the following query work?

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
        ]);

How do I do it ?

Upvotes: 0

Views: 97

Answers (2)

Aaron
Aaron

Reputation: 546

I would avoid using createAlias as it's hibernate specific and doesn't play well with unit tests. If you are joining across a to-many, you need to use listDistinct to prevent getting duplicate ApproverGroup entries in the result.

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

Upvotes: 1

WeMakeSoftware
WeMakeSoftware

Reputation: 9162

Try fetching it with criteria.

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

Upvotes: 1

Related Questions