首先,我是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
]);
我该怎么做?
答案 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
}
}