Hibernate 在Grails中使用like-to-non-string列
我目前正在开发一个Hibernate 在Grails中使用like-to-non-string列,hibernate,grails,gorm,Hibernate,Grails,Gorm,我目前正在开发一个Grails查询服务,该服务涉及使用名为filterText的特定条件从数据库中检索行 List getAdjustmentCodes(params) { def filterText = params.filterText . . . adjustmentCodeList = AdjustmentCode.findAll{ or { ilike('description', "%$filterTe
Grails
查询服务,该服务涉及使用名为filterText
的特定条件从数据库中检索行
List getAdjustmentCodes(params) {
def filterText = params.filterText
.
.
.
adjustmentCodeList = AdjustmentCode.findAll{
or {
ilike('description', "%$filterText%")
// ilike('id', "%$filterText%")
}
}
return adjustmentCodeList
}
请注意,我注释掉了行ilike('id',“%$filterText%”)
,因为当程序到达该行时,它会抛出一个错误:
org.springframework.core.convert.conversionfailedeexception:无法将值从java.lang.String类型转换为java.lang.Long类型…
这可能是因为该表的id
列的类型为long
:
class AdjustmentCode implements Serializable {
Long id
String description
String type
String status
Date statusDate
String lastUpdateBy
Date lastUpdateDate
static mapping = {
table 'RFADJUSTCDOTB'
version false
id column : 'ADJUS_CD'
description column : 'ADJUS_DESC'
type column : 'ADJUS_TYPE'
status column : 'ADJUS_STATCD'
statusDate column : 'ADJUS_STATDTE'
lastUpdateBy column : 'ADJUS_LUPDBY'
lastUpdateDate column : 'ADJUS_LUPDDTE'
}
.
.
.
}
但是我需要对这个列使用like
操作符。例如,用户希望使用类似于以下内容的code
搜索调整:000023123
。这是使用like
操作符的正确方法,还是有其他方法。谢谢你的回答
我已经看到了这一点,但它没有告诉我们如何在
上使用非字符串,比如或子句中的。我喜欢只处理字符串(文本)。不能在其他数据类型上使用它。使用不敏感(与字符串相关)是没有意义的。这不是Grails或Hibernate的限制,而是SQL的工作方式
改为使用类似于
的操作符
这个问题以前有人问过,而且(从hibernate的角度来看)。ilike
只处理字符串(文本)。不能在其他数据类型上使用它。使用不敏感(与字符串相关)是没有意义的。这不是Grails或Hibernate的限制,而是SQL的工作方式
改为使用类似于
的操作符
这个问题以前有人问过,而且(从休眠的角度来看)。这里有一个替代方案:
class AdjustmentCode implements Serializable {
Long id
String description
.....
String idAsString
static mapping = {
table 'RFADJUSTCDOTB'
...
idAsString formula('to_char(id)') // Or use an equivalent fn to convert it to a String
}
然后可以使用ilike,如下所示:
ilike('idAsString', "%${filterText}%")
我想这是一个懒惰的解决办法,但它应该会起作用。好吧,这里有一个替代方案:
class AdjustmentCode implements Serializable {
Long id
String description
.....
String idAsString
static mapping = {
table 'RFADJUSTCDOTB'
...
idAsString formula('to_char(id)') // Or use an equivalent fn to convert it to a String
}
然后可以使用ilike,如下所示:
ilike('idAsString', "%${filterText}%")
我想这是一种懒惰的解决方法,但它应该可以工作。刚刚尝试了select*from table\u a,其中a.id像“%1”
,它可以工作。您使用的是什么数据库引擎?SQL规范不应允许这种情况。只需尝试从表a中选择一个a.id(如“%1”)
就可以了。您使用的是什么数据库引擎?SQL规范不应该允许这样做。如果使用普通的比如?e、 g.like('id',“%$filterText%”)
如果使用普通like
,可能会重复什么?e、 g.类似('id',“%$filterText%”)
或的可能重复项。。。最简单的方法是将长id
更改为字符串id
。。。最简单的方法是将长id
更改为字符串id
。