gpt4 book ai didi

hibernate - 将字符串列转换为Long grails createCriteria

转载 作者:行者123 更新时间:2023-12-02 14:00:49 25 4
gpt4 key购买 nike

我在grails中有一个域类,该类具有一列字符串类型。下面是域类结构。

class TravelRequestUpdates{
updatedAt sqlType:'varchar(40)'

String updatedAt


}

我将纪元日期存储在此列中。我想使用createCriteria在此列上执行一次检查以检查长类型值,但无法这样做。有没有一种方法可以将此列中的值存储为String并仍然对存储的值执行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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com