【问题标题】:Grails: Joda LocalDate as unique key in a MySQL databaseGrails:Joda LocalDate 作为 MySQL 数据库中的唯一键
【发布时间】:2014-06-25 17:21:09
【问题描述】:

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

它使用 H2 工作,但使用 MySQL db 我在应用启动时出现此错误:

[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 {
    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
}

【问题讨论】:

    标签: mysql grails jodatime


    【解决方案1】:

    猜想,我认为date 是mySQL 中的保留字。重命名字段并重试

    更新:

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

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

    要修复它,您可以使用自定义休眠类型(不知道如何),或者通过保存将属性转换为平面 java 的 Date 类,并在加载后返回 LocalDate

    【讨论】:

    • 不,抱歉:我使用的是意大利语属性名称。我为 Stackoverflow 翻译了它:)。为避免误解,我编辑了我的帖子。
    • 它们是解决方法,但几个月后,我认为没有其他解决方案。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2016-06-27
    • 2012-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多