Reputation: 1279
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
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
Reputation: 9162
Try fetching it with criteria.
def approverGroups = ApproverGroup.withCriteria() {
createAlias('corporateHouseUser','corporateHouseUser')
eq('corporateHouseUser.id', corporateHouseId)
}
Upvotes: 1