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