Hibernate:是否可以在命名查询中一起使用Like和In?

时间:2017-12-15 10:51:54

标签: mysql sql hibernate named-query

我的命名查询很长,因为使用Like with OR作为对象树非常大。我们可以在命名查询中一起使用Like和In:

#Mysql
@NamedQuery(name="getDhahush", query="SELECT d.pid FROM Dhahush d WHERE lower(d.person.telephon.mobile.mobno) LIKE lower('78129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('8129%') OR lower(d.person.telephon.mobile.mobno) LIKE lower('5159%')")

底层数据库是MySQL。

2 个答案:

答案 0 :(得分:0)

LIKE 不能与IN

结合使用
{
  "calls": [
    {
      "accound_sid": "1234", 
      "api_version": "2010-04-01", 
      "date_created": "Wed, 18 Aug 2010 20:20:06 +0000", 
      "etc": "etc", 
    },
    {
      "accound_sid": "4321", 
      "api_version": "2010-04-01", 
      "date_created": "Wed, 18 Aug 2010 20:20:06 +0000", 
      "etc": "etc", 
    }
  ]
}

但是我会从较低位置删除较低位置(d.person.telephon.mobile.mobno),因为首先它是一个数字并且不需要更低,其次最重要的是,lower()函数将无法使用任何索引专栏已经到位" mobno" 欢呼声。

答案 1 :(得分:0)

使用ANY代替。

您的查询在PostgreSQL中变成类似的东西:

select 'foo' like any(array['f%', '%o%', '&t']);

MySQL并不支持这种确切的语法,但您可以使用子查询执行类似的操作:

select 'foo' like any( select 'f%' union select '%o%' union select '&t');