2012-11-07 5 views
17

ように私は私が名前を入力すると、それはDBからレコードを取り出し、jQueryのを使用してオートコンプリート機能を実装しています、DBに保存されたレコードは、資本&小文字の混合物です。私は大文字と小文字を区別してレコードを取り出すHQLクエリを作成しましたが、大文字と小文字を区別せずにレコードを作成する必要があります。ここでは、クエリ、はHQL大文字小文字を区別しない検索のためのオペレータ

List<OrganizationTB> resultList = null; 
Query query = session.createQuery("from DataOrganization dataOrg where dataOrg.poolName 
like '%"+ poolName +"%'"); 
resultList = query.list();  

例は次のとおりです。私は、プール名、HRMSデータセット、HRMSデータ、人事データなどを持っている場合、私はHRまたは時間を入力すると...私は、すべての3つのレコードを取得する必要があるI私はできない。

助けてください...

答えて

41

変更の詳細について

"from DataOrganization dataOrg where lower(dataOrg.poolName) 
like lower('%"+ poolName +"%')" 

へのお問い合わせは、持っている表情は14.3 doc

+0

それはそれは防ぎようのおかげでトン – madhu

+2

あなたは、のような表現のために '" 'poolName.toLowerCaseは()' '下(「%『+ poolNameの+』%」)にわたって良好な選択であると考えてはいけない..働きましたDB固有の関数へのHQL関数変換のための余分なオーバーヘッド? –

+0

@ArunKumarあなたが 'poolName.toLowerCase()'を実行してJava-Pojoでコンパイルを行うと、SQL最適化はありません。関数lowerの場合は方言レベルでSQL最適化が可能です少ないメモリでより少ないメモリを消費します。データベースからフェッチされたオブジェクトの数。 –

12

良い解決策は以下のとおりです。ですから、

List<OrganizationTB> resultList = null; 
Query query = session.createQuery("from DataOrganization dataOrg where lower(dataOrg.poolName) like :poolName"); 
query.setParameter("poolName", '%'+poolName.toLowerCase()+'%'); 
resultList = query.list(); 

SQLインジェクションからコードを保護する

+0

テーブルフィールドの内容とクエリ文字列の両方を小文字にします。 – FaithReaper

関連する問題