1

Spring-roo の "finder list" コマンドに、動的ファインダーのリスト数を削減するための "filter" パラメータを追加しました。しかし、それは私にとってはうまくいきませんでした。「名前」または「価格」を含むファインダーがリストされました。

 finder list --depth 2 --filter name,price

「名前」と「価格」のファインダーのみを含むようにフィルタリングする方法を教えてもらえますか? つまり、findBooksByNameNotEqualsAndPrice(文字列名、浮動小数点価格) findBooksByNameEqualsAndPrice(文字列名、浮動小数点価格) ......

4

2 に答える 2

1

Roo のソースを確認したところ、AND のような動作を取得する方法がないようで、ファインダー アドオンでサポートされているのは OR ベースのロジックのみです。

こちらのファインダー アドオン src を参照してください。 .

またはここのソースコード:

final SortedSet<String> result = new TreeSet<String>();
for (final String finder : finders) {
    required: for (final String requiredEntry : requiredEntries) {
       if (finder.toLowerCase().contains(requiredEntry)) {
            result.add(finder);
            break required;
        }
    }
}
return result;

リスト操作は、ファインダーの小文字の名前に必要なエントリが見つかるたびに、結果リストにフィルターを追加するようです。

リストをフィルタリングする唯一の方法は、finder listコマンドの出力をコピーして、外部の grep のようなユーティリティを実行することです。それ以外の場合は、できるだけ多くのファインダー名と一致させることができます:たとえば、 EqualsAndPrice(String name)のようなものです。その後、プレーンな Java String.containsメソッドが使用されます。

于 2012-04-30T20:05:07.597 に答える
1

私の経験では、エンティティのアノテーションでファインダー名を直接複合する方が簡単であることに気付きました: @RooJpaActiveRecord(finders = { "findTubesByVectorOrResearcher","findTubesByBox" }) 「好き」「間」など

あなたの質問については、grep が簡単な解決策だと思います。

于 2012-05-05T18:58:04.900 に答える