2016-08-19 15 views
0

私は、次の春データJPAリポジトリを持っている:春データJPAとのstartsWithリポジトリ

@RepositoryRestResource(collectionResourceRel = "product", path = "product") 
public interface ProductRepository extends PagingAndSortingRepository<Product, Integer> { 

    @RestResource(path = "nameStartsWith", rel = "nameStartsWith") 
    Page findByNameStartsWithOrderByNameDesc(@Param("name") String name, Pageable p); 


} 

Productクラスの定義が明らかであるとPostgreSQLデータベースにマッピングされたJPAエンティティです。

これはかなりうまく動作しますが、修正できない厄介な問題があります。

私は、_%をワイルドカードとして使用するlike演算子を使用して、このメソッド定義をSQLクエリで変換するとします。とにかく、このメソッドに渡されたときにそれらの文字がエスケープされないことは恐れています。その結果、_を含む名前の商品を検索すると、「任意の文字」として理解されます。私の製品が使用する命名規則。

メソッドに渡される前にnameパラメータをエスケープする方法が必要ですが、私が考えることができる唯一の方法は、メソッドを実装して、すべての魔法のスプリングデータを失うことです。これを行うよりエレガントな方法はありますか?

ありがとうございました!私は春ブーツに1.4.0

+0

問題が発生しましたか? –

+0

私は最初に、Springが%と_文字をエスケープせずに、正しいSQLクエリを生成していないことを確認します。あなたは正しいかもしれませんが、おそらくすでにそれを処理しています。 SQLログオンを有効にし、何が生成されているかを確認します。 –

+0

こんにちはJBは、_の代わりに任意の文字を含むプロダクトを返すので、メソッドの動作は明らかです。つまり、エスケープされていないか、バネデータのどこかに大きなバグがあります。とにかくちょうど私が言ったことを確認します:生成されたクエリはlikeオペレータを使用し、パラメータはエスケープされない入力で与えられたものです。 –

答えて

関連する問題