0

嗨,我在构建命名查询时似乎碰壁了。

我有以下情况:一个人有一个可选的地址,一个地址有一个可选的国家。

现在我想过滤一堆字段并在搜索某些文本时返回结果。

我尝试了以下部分,但是每当一个人有一个位置和地址并且地址没有国家/地区时,我就没有结果。

    filterOnAddress { String loc ->
        if(!loc.isEmpty()) {
            location {
                address {
                    or {
                        ilike 'street', "%${loc}%"
                        ilike 'city',  "%${loc}%"
                        country {
                            or {
                                ilike 'titleLocal',  "%${loc}%"
                                ilike 'title',  "%${loc}%"
                            }
                        }
                    }
                }
            }
        }
    }
}

filterOnAddress { String loc ->
    if(!loc.isEmpty()) {
        location {
            address {
                or {
                    ilike 'street', "%${loc}%"
                    ilike 'city',  "%${loc}%"
                    and {
                        isNotNull('country')
                        country {
                            or {
                                ilike 'titleLocal',  "%${loc}%"
                                ilike 'title',  "%${loc}%"
                            }
                        }

                    }
                }
            }
        }
    }
}

每当 Person 的 Country 为 null 时,查询不会返回预期结果,因为据我所知,某些条件已满足!因此,当一个国家/地区为空时,我会期待一些结果。

当国家为空但其他条件成功时,我的查询中需要什么?

4

1 回答 1

0

从快速扫描来看,这对我来说很合法。我建议删除国家部分并确保您在没有它的情况下获取数据。然后我的下一步是打开 sql 日志记录(根据http://grails.org/doc/latest/guide/conf.html#dataSource将 logSql 元素添加到数据源),并查看用于查找数据的内容.

于 2012-11-13T19:25:24.983 回答