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

标签 hibernate grails grails-orm hibernate-criteria

我在 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'

最佳答案

抱歉,我的评论无法解决这个问题,因为我认为这是您的输入范围。

有几个选项

  1. 在域类中启用 Long transient 对象,将底层字符串转换为 Long:

    class TravelRequestUpdates{
     String updatedAt
     Long myConversion
    
     static transients = [ 'myConversion' ]
    
    
     Long getMyConverion() {
      return (this.updatedAt as Long)
     }
    }
    
  2. 可以用类似 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/

相关文章:

java - Maven 被杀 - 不知道为什么

java - 使用 Hibernate 通过 SSH 隧道获取数据

java - 如何使用 EJBQL 选择实体集合并将其作为参数传递给 Bean?

java - Spring -> org.hibernate.HibernateException : Illegal attempt to associate a collection with two open sessions

java - HSQLDB 2.2 跳过某些实体并且不为它们创建表

javascript - Grails 使用 gsp 片段作为 javascript 函数的 html 模板

spring - 如何在Grails中使用自定义PropertyPlaceholderConfigurer

grails - 使用 GZIPInputStream 解压缩 REST 响应

java - 如何在 Grails 中使用组合键访问行?

hibernate - Grails GORM - 查找具有不同属性值的所有对象