我在 grails 中有一个域类,其中有一列字符串类型。下面是域类结构。
class TravelRequestUpdates{
updatedAt sqlType:'varchar(40)'
String updatedAt
}
我在此列中存储纪元日期。使用 createCriteria 我想对此列执行长类型值之间的检查,但无法这样做。有没有办法可以将此列中的值存储为 String 并仍然对存储的值执行 Long 类型操作。下面是我的标准的代码,我希望存储在该表中的值表现为 long 类型。未比较日期。
def criteriaObj = TravelRequestUpdates.createCriteria()
def travelToShow = criteriaObj.get{
@Formula("cast(updatedAt as NUMBER(20,0))")
long tempUpdatedAt
tr{
eq('id',g.id)
}
and{
between(tempUpdatedAt, startTimeReport.time, endTimeReport.time)
}
and{
newStatus{
eq('id',completedTravelsStatus.id)
}
}
}
我想生成如下查询。下面的查询给了我想要的结果。
SELECT *
FROM travel_request_updates
WHERE tr_id = '439'
AND updated_at BETWEEN ('1478016321000') AND('1478189121000')
AND new_status_id = '4'
最佳答案
抱歉,我的评论无法解决这个问题,因为我认为这是您的输入范围。
有几个选项
在域类中启用 Long transient 对象,将底层字符串转换为 Long:
class TravelRequestUpdates{ String updatedAt Long myConversion static transients = [ 'myConversion' ] Long getMyConverion() { return (this.updatedAt as Long) } }
可以用类似
HQL
的方式编写它,并可能强制转换对象:String query = "FROM travelRequestUpdates WHERE tr_id = :myid AND cast (updatedAt as Long) BETWEEN (:input1) AND(:input2) AND newSatusId = :status" def myParams=[status: '4', input1: 1478016321000L, input2: 1478189121000L, myId: 439L] def myList = TravelRequestUpdates.execute(query,myParams,[readonly:true])
L
已将它们转换为 Long 值,如果您愿意,您可以声明 long 值,或者您可以运行 sql query directly如果这一切都失败了。
关于hibernate - 将字符串列转换为 Long grails createCriteria,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40406727/