Grails Criteria查询数据条件

时间:2014-11-18 20:18:41

标签: grails hibernate-criteria

我有一个数据库表,使用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原则,我宁愿避免修改数据库。

1 个答案:

答案 0 :(得分:3)

这会吗?

A.createCriteria().list{
    or {
        eq 'propOver', search_input
        and {
            isNull 'propOver'
            eq 'propBase', search_input
        }
    }
}