简体   繁体   中英

Case Insensitive search in hibernate

I want to perform a hibernate named query but its giving hibernate syntax exception. In SQL it's running properly..chart will come as a query parameter and query value = 'chart' ?

SELECT * FROM faq WHERE UPPER(answer) LIKE UPPER('%chart%')

select f from Faq f where lower(f.question) like lower('%:query%') or lower(f.answer) like lower('%:query%')

@NamedQuery(name = "findQuesAnsByQuery", query = "select f from Faq f where lower(f.question) like lower('%:query%') or lower(f.answer) like lower('%:query%')")

Trace:

[0] = {java.lang.StackTraceElement@16677}"org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:679)"
[1] = {java.lang.StackTraceElement@16678}"org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)"
[2] = {java.lang.StackTraceElement@16679}"org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)"
[3] = {java.lang.StackTraceElement@16680}"org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)"
[4] = {java.lang.StackTraceElement@16681}"org.springframework.orm.hibernate3.HibernateTemplate.findByNamedQuery(HibernateTemplate.java:979)"
[5] = {java.lang.StackTraceElement@16682}"org.springframework.orm.hibernate3.HibernateTemplate.findByNamedQuery(HibernateTemplate.java:971)"
[6] = {java.lang.StackTraceElement@16683}"com.hk.impl.dao.BaseDaoImpl.findByNamedQuery(BaseDaoImpl.java:157)"

I think your problem is in using the '%:query%'.. in the query.. Change to this:

@NamedQuery(name = "findQuesAnsByQuery"
  , query = "select f from Faq f 
        where lower(f.question) like lower(CONCAT('%', :query, '%')) 
           or lower(f.answer) like lower(CONCAT('%', :query, '%'))")

or

@NamedQuery(name = "findQuesAnsByQuery"
      , query = "select f from Faq f 
            where lower(f.question) like lower(:query) 
               or lower(f.answer) like lower(:query)")

and then set the param:

.setString("query", "%" + query+ "%")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM