【问题标题】:Case Insensitive search in hibernate休眠中不区分大小写的搜索
【发布时间】:2017-06-20 16:32:02
【问题描述】:

我想执行一个休眠命名查询,但它给出休眠语法异常。在 SQL 中它运行正常..chart 将作为查询参数和查询值 = '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%')")

追踪:

[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)"

【问题讨论】:

  • 请附上堆栈跟踪

标签: java sql hibernate jpa orm


【解决方案1】:

我认为您的问题在于在查询中使用 '%:query%'.. 更改为:

@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, '%'))")

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

然后设置参数:

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

【讨论】:

  • 好的,您可以添加调用该查询的事务方法吗?
  • 另外,添加常见问题实体声明
  • 这是因为通过将 concat 直接应用于不在休眠查询中的代码的语法问题,它工作正常
  • 我明白了。很高兴它帮助了你
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-15
  • 2015-07-31
相关资源
最近更新 更多