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の場合は常に、クエリは期待される結果を返しません。したがって、国がnullの場合にいくつかの結果が期待されます。

国がnullであるが、他の基準が成功した場合、クエリに何を含める必要がありますか?

4

1 に答える 1

0

これは、クイックスキャンから私にはかなり合法に見えます。国セクションを削除し、それなしでデータを取得していることを確認することをお勧めします. 次に、SQL ロギングを有効にし ( http://grails.org/doc/latest/guide/conf.html#dataSourceに従って logSql 要素をデータソースに追加します)、データの検索に何が使用されているかを確認します。 .

于 2012-11-13T19:25:24.983 に答える