2017-05-21 4 views
0

私は、その家の名前でアドレスを検索するリポジトリクエリメソッドを実装しようとしています。この検索クエリで大文字小文字を区別しないようにします。Spring EL - 大文字と小文字を区別しないLIKE構文

私はアドレスリポジトリで次の検索方法を定義しています。しかし、この検索は大文字と小文字を区別します

@Query(value = "select ad from #{#entityName} ad where ad.houseName LIKE :houseName%") 
    public Page<LocalAddress> findByHouseName(@Param("houseName") String houseName, Pageable page); 

このクエリで大文字小文字を区別しないようにするにはどうすればよいですか。

+0

が重複する可能性をLIKEワイルドカードを使用しますか?](http://stackoverflow.com/questions/2876789/how-can-i-search-case-insensitive-in-a-column-using-like-wildcard) – jediz

+0

@DeltaCharlie私の答えがあなたを助けたらそれを受け入れることを忘れないでください) – Cepr0

答えて

0

これはむしろデータベースエンジンの問題です。 SpELは式を評価し、プレースホルダを値で置き換えます。

Page<LocalAddress> findByHouseNameIgnoreCaseContaining(String partOfHouseName, Pageable page); 

このメソッドは、大文字と小文字を区別しないlike演算子を使用してから独立して自分のデータをフェッチします:ちょうど春データmagicを使用し、クエリを記述し、手動で必要としない、あなたのタスクを実装するには、質問How can I search (case-insensitive) in a column using LIKE wildcard?

+0

それはできませんSpELでLIKEを使用して大文字と小文字を区別しない検索を行いますか?私は自分のクエリを特定のDBエンジンに結びつけたくない。 –

+0

間違ったツールを使って仕事をしているようだ。 Springがどのように機能を実装すると思いますか?私はあなたのクエリを魔法のように書き直すには十分知的だとは思っていません(すべてのデータベースベンダーをサポートする必要があります)。 – jediz

+0

私はあなたのことを理解していると思います。大文字と小文字を区別しないLIKEの構文はDBエンジンによって異なるため、SpELを使用して動的クエリを生成することはできません。 –

2

を参照してください。 DB。


それでも、あなたはJPQLクエリで明示的に指定することができます。ここ

@Query("select a from LocalAddress a where upper(a.houseName) like concat('%', upper(?1), '%')") 
Page<LocalAddress> getByName(String partOfHouseName, Pageable page) 

さらに詳しい情報:[どのように私は列に(大文字と小文字を区別しない)検索できるのJPQL Reference

+0

私はすでにこの方法を知っています。私はSpELで同じことを実装しようとしていました。 findByのクエリ名は時間がかかり過ぎるため、代替が必要です。 –

+0

@DeltaCharlie私の答えを更新しました... – Cepr0

関連する問題