特定の属性をフィルタリングする必要のあるオブジェクトがあり、その一部は「null」である可能性もあります。FilterオブジェクトとProductオブジェクトがあります。
Filterオブジェクトには、Productオブジェクトを反映する特定の属性があり、入力することも空白のままにすることもできます。ここにクラスの短縮図があります。
Product: String name, Boolean isEmpty, ...., belongsTo [Producer, Distributor]...
Filter: Boolean isEmpty, ... belongsTo [Producer, Distributor]...
このフィルターを使用すると、特定の属性(空、プロデューサー、ディストリビューター)を持つすべての製品を検索できます。
フィルタを選択できるエクスポート機能があり、製品の選択に基づいて情報が出力されます。
これらの属性はすべてnullになる可能性がありますが、値も含まれるため、最初に独自の検索クエリ(文字列などの組み合わせ)を作成してSQL文字列を作成し、次にProduct.findAll(string_query、string_params)を使用することを考えました。しかし、これは非常に面倒なので、今は次のようなものに変更しました。
if(filter.producer)
prods = Product.findAllWhere(producer:filter.producer)
if(filter.distributor)
prods = prods.findAll {it.distributor == filter.distributor}
if(filter.isEmpty!=null) //as it could be NULL but also false/true
prods = prods.findAll {it.isEmpty == filter.isEmpty}
しかし、フィルタリングする属性が10〜15個ある場合、これは非常に大きなタスクになります。GrailsやGroovyの経験はあまりありませんが、これは簡単に解決できると思いますよね?