2012-11-07 15 views
17

Wdrażam funkcję autouzupełniania za pomocą Jquery, kiedy wpisuję nazwę, pobiera ona rekord z bazy danych, Rekordy przechowywane w db są mieszanką małych liter o wartości & kapitału. Napisałem kwerendę HQL, która przynosi mi rekordy z rozróżnianiem wielkości liter, ale muszę nagrywać niezależnie od przypadku. Oto zapytanie,Operator podobny do HQL do wyszukiwania niewrażliwego na wielkość znaków

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

Ex: Jeśli mam nazwy basen, usytuowany HRMS danych, HRMS danych, dane Hr etc ... gdybym typu HR lub hr muszę uzyskać wszystkie 3 rekordy, które nie jestem w stanie.

Proszę o pomoc ...

Odpowiedz

41

zmienić zapytanie do

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

więcej informacji spojrzeć 14,3 doc

+0

Udało się .. dziękuję ton – madhu

+2

Nie sądzisz, że 'poolName.toLowerCase()' jest dobrym wyborem niż 'lower ('%" + poolName + "%')" 'dla wyrażenia podobnego, ponieważ zapobiega dodatkowe obciążenie dla konwersji funkcji HQL do funkcji specyficznej dla DB? –

+0

@ArunKumar Myślę, że jeśli użyjesz 'poolName.toLowerCase()', wtedy kompilacja zostanie wykonana w Javie-Pojo, nie będzie żadnej optymalizacji SQL, gdzie jak w przypadku funkcji 'lower' istnieje możliwość na poziomie dialektu do optymalizacji SQL i zużyje mniej pamięci przy mniejszym nie. obiektów pobranych z bazy danych. –

12

Dobrym rozwiązaniem jest:

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(); 

Więc chroń swój kod przed iniekcją SQL

+0

I masz zawartość pól tabeli i ciąg kwerendy o małych rozmiarach. – FaithReaper

Powiązane problemy