2009年7月5日日曜日

criteriaでのプロパティ指定

Grailsユーザ・ガイドCriteriaの項を読んでいて, こんな例が出ているので,



def criteria = Task.createCriteria()
def tasks = criteria.list{
eq "assignee.id", task.assignee.id
join 'assignee'
join 'project'
order 'priority', 'asc'
}

「ふーん, プロパティ名には'.'を含むナビゲーションが書けるのね」と軽く読み飛ばしていたのだが, それは一般には無理で, 'id'の場合のみ許されるようなのだ, と言うことが分かってきた.


じゃあ, それ以外の「行った先の」プロパティでクライテリアを組み立てたい場合にはどうすればいいか.



eq "assignee", Person.findByName("foo")


なんてのが一つ. でもこれはid的でないプロパティでは使いにくいだろう.



assignee { eq "name", "foo" }

でもOKぽい (つまり関連先が多でなくてもクライテリアには書ける).


単純なことだが, 備忘のために記しておく.