私は、次の春データ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
問題が発生しましたか? –
私は最初に、Springが%と_文字をエスケープせずに、正しいSQLクエリを生成していないことを確認します。あなたは正しいかもしれませんが、おそらくすでにそれを処理しています。 SQLログオンを有効にし、何が生成されているかを確認します。 –
こんにちはJBは、_の代わりに任意の文字を含むプロダクトを返すので、メソッドの動作は明らかです。つまり、エスケープされていないか、バネデータのどこかに大きなバグがあります。とにかくちょうど私が言ったことを確認します:生成されたクエリはlikeオペレータを使用し、パラメータはエスケープされない入力で与えられたものです。 –