私は、2つのパラメータをとるスプリングデータリポジトリインタフェースを使用したいと考えています。次のような動作をさせる方法はありますか?スプリングデータ - null値を持つパラメータを無視する
MyObject findByParameterOneAndParameterTwo(String parameterOne, String parameterTwo);
両方のパラメータに値がある場合は、正常に動作し、両方の値に対して「AND」を実行します。
例えば2番目のパラメータがnullの場合、それだけでParameterOne
任意の提案をして検索しますか?
Springデータで提供されるリポジトリメソッド名からクエリを派生させるメカニズムは、クエリが事前にわかっている場合を想定しています。実行時にのみ正確に知られているクエリでそのメカニズムが機能することは期待できません。動的な状況の場合、 '@ Query'やQueryDSLのようないくつかのオプションがあります。 SQLとJPAは 'COALESCE'関数をサポートしています。この関数は時には' NULL'値を持つ可能性のあるパラメータを回避するために使用できます。 @Query( "MyObject eからのSELECT eからCOALESCE(e.parameterOne、?1)=?1 AND COALESCE(e.parameterOne、?2)=?2") 'が動作するはずです。 – manish
@manish私は 'COALESCE(?1、e.parameterOne)= e.parameterOne'はあなたの意図だと思います。 – Blank
@Forward、私はポスターが正確に動作するようにポスターがどのようになっているかわからないので、ポスターに指示を与えただけです。例えば、データベースにそれらの列の 'null'値を含めることができるかどうか、そして' yes 'の場合は、どのようにして一致するかなどが指定されていません。しかし、はい、投稿されたものだけに基づいて、あなたのコメントにスポットがあります。 – manish