2

我是 Grails 的新手,我正在使用带有 MySQL 5.5 后端的 Grails 2.1 来构建一个示例项目来学习。

我安装了 JodaTime 1.4 Plug-in 然后运行grails install-joda-time-templates

但是,当我将域类字段声明为 org.joda.time.DateTime 类型时,尝试保存新条目时出现错误。

为了隔离问题,我创建了一个简单的域类:

import org.joda.time.DateTime

class Project
{
    String name
    DateTime startDate

    static constraints = {
        name(blank: false, maxSize: 50)
        startDate(validator: {return (it > new DateTime())})
    }
}

控制器只是将脚手架设置为使用域类。

我的 DataSource.groovy 指定dbCreate = "create-drop",因为我让 Grails 创建表。

这是我尝试保存时遇到的错误:

Class:com.mysql.jdbc.MysqlDataTruncation
Message:Data truncation: Data too long for column 'start_date' at row 1

当我查看 Grails 创建的 MySQL 数据库中的 project.start_date 列时,类型是 TINYBLOB。

我的想法是 TINYBLOB 可能不足以存储 JodaTime DateTime 字段的数据。

有谁知道我怎样才能让 Grails 创建一个合适的类型?

非常感谢你。

4

2 回答 2

5

在您的 Config.groovy 中:

grails.gorm.default.mapping = {
    "user-type" type: PersistentDateTime, class: DateTime
    "user-type" type: PersistentLocalDate, class: LocalDate
}

还有你的映射闭包:

static mapping = {
    startDate type: PersistentDateTime
}

看看这篇文章了解更多信息,看看它是否有帮助。

于 2012-08-16T13:28:25.253 回答
0

我做了什么使它工作(Grails 2.1):

1)添加到buildConfig:

compile "org.jadira.usertype:usertype.jodatime:1.9"

2)刷新依赖

3) 运行此命令添加支持的用户类型:

grails install-joda-time-gorm-mappings

4)最后在域类中:

import org.jadira.usertype.dateandtime.joda.*

static mapping = {
 column_name type: PersistentDateTime
}

文档在这里找到:持久性

于 2012-08-26T13:19:12.850 回答