2012-11-07 37 views
17

Tôi đang triển khai chức năng tự động hoàn tất bằng cách sử dụng Jquery, khi tôi nhập tên, nó lấy bản ghi từ db, Các bản ghi được lưu trữ trong db là hỗn hợp của các chữ cái viết hoa &. Tôi đã viết một truy vấn HQL mà lấy tôi hồ sơ với trường hợp nhạy cảm, nhưng tôi cần phải ghi lại không phân biệt trường hợp. Dưới đây là các truy vấn,Toán tử HQL giống như trường hợp tìm kiếm phân biệt chữ hoa chữ thường

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

Ex: Nếu tôi có tên hồ bơi, bộ HRMS dữ liệu, HRMS dữ liệu, dữ liệu Hr vv ... nếu tôi gõ HR hoặc giờ tôi cần phải có được tất cả 3 hồ sơ, mà tôi 'không thể.

Xin vui lòng giúp ...

Trả lời

41

thay đổi truy vấn của bạn để

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

để biết thêm thông tin có một cái nhìn 14,3 doc

+0

Nó hoạt động .. cảm ơn một tấn – madhu

+2

Bạn không nghĩ rằng 'poolName.toLowerCase()' là một lựa chọn tốt trên 'lower ('%" + poolName + "%')" 'cho biểu thức như vậy, vì nó ngăn chặn thêm chi phí cho HQL chức năng chuyển đổi để DB chức năng cụ thể? –

+0

@ArunKumar tôi nghĩ rằng nếu bạn 'poolName.toLowerCase()' sau đó tổng hợp sẽ được thực hiện tại Java-Pojo, sẽ không có bất kỳ tối ưu hóa SQL nào như trong trường hợp hàm 'lower' có khả năng ở cấp phương ngữ để tối ưu hóa SQL và sẽ tiêu thụ ít bộ nhớ hơn với ít không. các đối tượng được tìm nạp từ cơ sở dữ liệu. –

12

Một giải pháp tốt là:

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

Vì vậy, bạn bảo vệ mã của bạn khỏi việc tiêm SQL

+0

Và bạn có nội dung của các trường bảng và chuỗi truy vấn cả hai được sắp xếp thấp hơn. – FaithReaper

Các vấn đề liên quan