JPQL:将Long转换为String来执行LIKE搜索

我有以下JPQL查询:

SELECT il
FROM InsiderList il
WHERE ( il.deleteFlag IS NULL OR il.deleteFlag = '0' )
  AND il.clientId = :clientId
  AND (    LOWER( il.name ) LIKE :searchTerm
        OR il.nbr LIKE :searchTerm
        OR LOWER( il.type ) LIKE :searchTerm
        OR LOWER( il.description ) LIKE :searchTerm )

客户希望我们能够搜索nbr字段,这是一个java.lang.Long

Q

你如何使用JPQL在java.lang.Long上执行LIKE搜索?


您可以在HQL中使用CAST

SELECT il
FROM InsiderList il
WHERE ( il.deleteFlag IS NULL OR il.deleteFlag = '0' )
  AND il.clientId = :clientId
  AND (    LOWER( il.name ) LIKE :searchTerm
        OR CAST( il.nbr as string ) LIKE :searchTerm
        OR LOWER( il.type ) LIKE :searchTerm
        OR LOWER( il.description ) LIKE :searchTerm )

但是你可能会遇到严重的性能问题,因为数据库不能使用nbr索引(如果nbr列索引)。


CAST( field as text/varchar) LIKE它必须是一个由数据库知道的类型(不像HQL中的字符串

并且查看您的查询有一个更有效的方法来执行此操作:

使用CONCAT,您不必输入非字符串参数(当有多个参数时,至少有一个参数是字符串)

这可以工作:LOWER(CONCAT(name, nbr ,description))LIKE

这不:CONCAT(nbr),我猜是因为它不能识别JPQL函数CONCAT(Long ..)


我已经通过在实体中创建@transient字段解决了同样的问题,然后使用下面的查询进行搜索:

id LIKE CONCAT('%',:txnId)
链接地址: http://www.djcxy.com/p/27199.html

上一篇: JPQL: cast Long to String to perform LIKE search

下一篇: Manually add ng animate to element