2015-09-22 17 views
14

リポジトリレイヤにいくつかのクエリメソッドを書きたいと思います。このメソッドはnullパラメータを無視する必要があります。たとえば:Springデータクエリメソッドのオプションパラメータ

bar == barParam && goo == gooParam; 

gooParamがnullでない場合:

List<Foo> findByBarAndGoo(Bar barParam, @optional Goo gooParam); 

は、このメソッドは、この条件ではFooを返さなければなりません。 gooParamがnullの場合、条件は次のように変更されます。

bar == barParam; 

解決方法はありますか?誰か助けてくれますか?あなたはわずか数行にこの身をコーディングすることができ

+2

あなたは何について話していますか? –

+0

リスト findByBarAndGoo(バーバー、オプションGoo goo){if(bar == null || goo == null){throw new IllegalArgumentException( "Parametresはnullにできません");}} – erhun

+0

このParamはnullで、このメソッドを無視するクエリメソッドです。ありがとう。 –

答えて

-2

:それ以外の場合は

List<Foo> findByBarAndOptionalGoo(Bar bar, Goo goo) { 
    return (goo == null) ? this.findByBar(bar) : this.findByBarAndGoo(bar, goo); 
} 

春データは箱から出して、これをサポートしている場合、私は知りません。

8

私は、クエリ定義へのメソッド名のアプローチでこれを実行できるとは思いません。ドキュメント(reference)から:メソッド名から派生したクエリを得ることは非常に 便利です

が、一つはメソッド 名パーサのいずれか一つを使用したいキーワードをサポートしていない状況に直面する可能性がありますか、メソッド は不必要に醜い名前になります。だから、JPAを使用するか、私はあなたがここにそのような状況なので、以下の答えを持っていると思う( 詳細については、JPA NamedQueriesの使用を参照)の命名規則を通じて クエリの名前か、むしろあなたのクエリメソッドは@query

に注釈を付けますメソッド名アプローチ(reference)とほぼ同じくらい便利な@Queryアノテーションアプローチを使用しています。

@Query("select foo from Foo foo where foo.bar = :bar and " 
     + "(:goo is null or foo.goo = :goo)") 
    public List<Foo> findByBarAndOptionalGoo(
     @Param("bar") Bar bar, 
     @Param("goo") Goo goo); 
関連する問題