【问题标题】: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');