【问题标题】:Hibernate: Is it possible to use Like and In together in Named Query?Hibernate:是否可以在命名查询中同时使用 Like 和 In?
【发布时间】:2017-12-15 10:51:53
【问题描述】:

我的命名查询很长,因为使用 Like 和 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。

【问题讨论】:

    标签: mysql sql hibernate named-query


    【解决方案1】:

    LIKE 不能与IN结合使用

    e.g.
    mobno LIKE IN ('781%','719%')
    

    但是我会从 lower(d.person.telephon.mobile.mobno) 中删除 lower,因为首先它是一个数字并且不需要 lower,其次也是最重要的,lower() 函数将无法使用任何索引已经在“mobno”列上 干杯。

    【讨论】:

      【解决方案2】:

      改用 ANY。

      您的查询在 PostgreSQL 中变成这样:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-05-18
        • 2011-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        • 1970-01-01
        相关资源
        最近更新 更多