Grails:Joda LocalDate作为MySQL数据库中的唯一键

时间:2014-06-25 08:50:57

标签: mysql grails jodatime

我有一个带有Joda LocalDate属性的域类。此属性必须是唯一的。

它使用H2工作,但使用MySQL数据库我在应用程序启动时出现此错误:

[SchemaExport.create(l.386)]Unsuccessful: create table [...]
[SchemaExport.create(l.387)]BLOB/TEXT column 'mydate' used in key specification without a key length

如果删除唯一约束,它也适用于MySQL。

这是一个错误还是我的误解?

我正在使用Grails 2.2.5。 域片段:

class MyClass {
    LocalDate mydate

    static constraints = {
        mydate(nullable:false, unique:true)
    }
}

DataSource配置片段:

dataSource {
    dbCreate = "create-drop"
    driverClassName = "com.mysql.jdbc.Driver"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect
    username = "xxx"
    password = "xxx"
    dbNamer = "myapp"
    url = "jdbc:mysql://localhost:3306/${dbNamer}?autoreconnect=true"
    logSql = true
}

1 个答案:

答案 0 :(得分:0)

猜测,我认为date是mySQL中的保留字。重命名该字段,然后重试

更新:

好的,我明白了。 问题是,GORM / Hibernate不知道joda LocalDate类,所以它试图为它创建一个BLOB列:

  

[SchemaExport.create(l.387)] BLOB / TEXT专栏' mydate'`。

要修复它,您可以使用自定义hibernate类型(不知道如何),或者通过保存将属性转换为平面java Date类,然后返回{{1}加载后