我有一个数据库表,使用vanilla GORM存储此Grails域类的数据:
class A {
String propOver // may be null
String propBase
}
我想创建一个搜索查询,如果它包含值,则搜索propOver
属性,否则对propBase
属性进行搜索。或者,换句话说,propOver
会覆盖propBase
。
我需要像这个伪代码一样的东西:
def results = A.createCriteria().list{
if propOver isn't null: // the heart of the problem
eq('propOver', search_input)
else
eq('propBase', search_input)
}
甚至可能吗?
请注意,一个(坏)解决方案是创建存储propOver ?: propBase
值的第3个属性,但它违反了DRY原则,我宁愿避免修改数据库。
答案 0 :(得分:3)
这会吗?
A.createCriteria().list{
or {
eq 'propOver', search_input
and {
isNull 'propOver'
eq 'propBase', search_input
}
}
}