Clob字段没有填充grails中的对象使用grails DSL更改setset

时间:2013-12-20 00:10:02

标签: grails groovy liquibase

我正在制作第一个涉及使用Groovy / Grails DSL的迁移脚本。它看起来像这样:

import my.package.MyObject
import my.package.MyObjectUtil
import javax.xml.bind.DatatypeConverter

databaseChangeLog = {

  changeSet(author: 'wheresjim', id: '1387238199-1')  {
    comment {'Sets the timestamp in each MyObject where null using the message text'}
    grailsChange {
      change {

        MyObjectUtil myObjectUtil = new MyObjectUtil()

        def criteria = MyObject.where {
          isNull("timestamp")
        }

        def PAGESIZE = 10
        int numRows = criteria.count()
        int pages = Math.ceil(numRows / PAGESIZE)

        (pages..0).each { page ->

          int offset = PAGESIZE * page + PAGESIZE

          def data = criteria.list(offset: offset, max: PAGESIZE, sort: 'id', order: 'asc')

          data.each { MyObject myObject ->

            Date timestamp = new Date(0L)

            try {
              def thisMessage = myObjectUtil.createMyObjectFromMessage(myObject.messageText)
              String dateStr = thisMessage.messageIdentification?.timestamp
              timestamp = dateStr ? DatatypeConverter.parseDateTime(dateStr).getTime() : timestamp
            } catch (Exception e) {
              // Do nothing, this will be logged in the finally which catches another error condition
            } finally {
              if (timestamp == new Date(0L)) {
                log.warn "Error attempting to set timestamp in MyObject ${myObject.id}, setting to $eventDateTime"
              }
            }

            myObject.timestamp = timestamp
            myObject.save(flush: true)
          }            
          log.warn "Updated ${myObject.id}"
        }
      }
    }
  }
}

MyObject.messageText是数据库中的一个clob,据我所知,没有努力懒洋洋地加载它。

我应该注意这个确切的脚本可以使用应用程序上的grails控制台插件工作(它可以找到clob文本)。

1 个答案:

答案 0 :(得分:0)

MyObject 中,请确保您拥有以下行:


static mapping = {
        messageText type: 'text'
    }