シナリオを考慮して、ここに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())
}
criteriaDSL(ドメイン固有言語)を使用しているため、grailsの場合、関連するテーブルを簡単に結合できます。brokerage{}上記の例では、INNER JOINとして基準で関連付けを提供することによってのみ、UserおよびBrokerageに基づいて実行されbrokerageIdます。
in grailsのCriteria優れた点は、クエリを動的に処理できることです。たとえば、 aUserに 1 つと 1Brokerageつと複数の がMortgageあり、 、、のいずれかがJSON で提供されている場合にシステムからLienを取得したい場合。上記の基準は、次のように効果的に強化できます。UserbrokerageIdmortgageIdlienId
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
}