我是Grails的新手,我正在使用带有MySQL 5.5后端的Grails 2.1构建一个示例项目来学习。
我安装了JodaTime 1.4插件,然后运行grails install-joda-time-templates
但是,当我将Domain Class字段声明为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创建一个合适的类型?
非常感谢你。
答案 0 :(得分:5)
在Config.groovy中:
grails.gorm.default.mapping = {
"user-type" type: PersistentDateTime, class: DateTime
"user-type" type: PersistentLocalDate, class: LocalDate
}
你的映射关闭:
static mapping = {
startDate type: PersistentDateTime
}
请查看this post以获取更多信息,看看是否有帮助。
答案 1 :(得分: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
}
在此处找到了文档:persistence