我有一个像这样的域对象(Cat):
class Cat {
String name
static hasMany = [
nicknames: String
]
}
(猫有一个名字,也有许多昵称(字符串))
我正在尝试查询所有带有某些昵称的猫。
我试过这个:
PagedResultList getCatsByNickname(String nickname, Map params) {
PagedResultList results = Cat.createCriteria().list(params) {
'ilike'('nicknames','%'+nickname+'%')
}
return results
}
但它永远不会返回任何结果。 (如果我将查询更改为只使用简单名称属性,它可以找到具有该名称的所有猫,但我想查询昵称。)
我也试过这个:
PagedResultList getCatsByNickname(String nickname, Map params) {
PagedResultList results = Cat.createCriteria().list(params) {
'nicknames' {
'ilike'('nicknames','%'+nickname+'%')
}
}
return results
}
但我收到错误:org.hibernate.MappingException:collection不是关联:example.Cat.nicknames
所以问题是,如何查询类型为String的hasMany?
答案 0 :(得分:10)
经过大量的尝试和研究,我发现这适用于Grails 2.4.0,我不了解旧版本。
Cat.withCriteria {
createAlias('nicknames', 'n')
ilike 'n.elements', '%kitty%'
}
诀窍是使用' n。元素'
答案 1 :(得分:8)
您可以在这种情况下使用HQL进行查询。例如,
Cat.findAll("from Cat c where :nicknames in elements(c.nicknames)", [nicknames:'kitty'])
答案 2 :(得分:0)
您也可以使用HQL(使用Grails 2.5.0测试):
echo $form->field($model, 'id')->dropDownList( $list,
array('onchange'=>"alert( $( this + ' option:selected').val());"));