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.