考虑到场景,这里是domain
类和criteria
查询
//Domain User
class User{
//each user has one brokerage
static hasOne = [brokerage: Brokerage]
}
//Domain Brokerage
class Brokerage{
//Optional
//static belongsTo = [user: User]
}
//Criteria Query
def user = User.createCriteria().get{
brokerage{
idEq(queryDto.getBrokerageID())
}
}
或者你也可以使用非DSL方式
def user = User.createCriteria().get{
eq('brokerage.id', queryDto.getBrokerageID())
}
criteria
在 grails中更容易连接关联的表,因为它使用 DSL(领域特定语言)。在上面的示例中,仅通过在条件中提供关联作为brokerage{}
INNER JOIN 才能在User
和Brokerage
基于 上完成brokerageId
。
in grails的美妙之Criteria
处在于您可以动态地处理您的查询。例如,如果 aUser
有 oneBrokerage
和 oneMortgage
和 many ,并且如果JSON 中提供了, ,中的任何Lien
一个,您想从系统中获取 an 。上述标准可以有效地提高为User
brokerageId
mortgageId
lienId
def user = User.createCriteria().get{
if(queryDto.getBrokerageID() != null){
brokerage{
idEq(queryDto.getBrokerageID())
}
} else if(queryDto.getMortgageID() != null){
mortgage{
idEq(queryDto.getMortgageID())
}
} else if(queryDto.getLienID() != null){
liens{
idEq(queryDto.getLienID())
}
}
}
User
域看起来像
class User{
//each user has one brokerage and one mortgage
static hasOne = [brokerage: Brokerage, mortgage: Mortgage]
static hasMany = [liens: Lien] //many Liens
}