【问题标题】:Grails Gorm DDL fails in Postgres 9 when lazy loading enum type延迟加载枚举类型时,Grails Gorm DDL 在 Postgres 9 中失败
【发布时间】:2012-04-04 09:43:47
【问题描述】:

考虑 Grails 中的以下域类:

enum MyEnum { One, Two, Three }

class MyClass {
    Collection mys = []
    static hasMany = [
        mys: MyEnum
    ]
    static mapping = {
        mys lazy: true
    }
}

在 Postgres 9.1 数据库上使用“create-drop”运行应用程序时,出现以下错误:

Unsuccessful: create table myclass_mys (myclass_id int8, myenum varchar(-1))
ERROR: syntax error at or near "-"

如果我删除惰性映射,错误就会消失。但是,出于其他原因,懒惰是必要的。我目前的解决方法是创建没有延迟映射的数据库,然后更改域类,这在开发环境中非常烦人。

关于如何修复 gorm 映射以使 varchar(-1) 像往常一样成为 varchar(255) 的任何想法?

【问题讨论】:

  • 您在 DataSources.groovy 中使用特定方言吗?
  • 我尝试了 org.hibernate.dialect.PostgreSQLDialect 和 net.sf.hibernate.dialect.PostgreSQLDialect,结果相同。

标签: grails enums grails-orm postgresql-9.1


【解决方案1】:

请注意,如果您在域类中使用枚举但未指定枚举的映射,则您的表将正常创建。虽然,如果您在映射块中提及您的枚举属性,您会遇到问题。有一种解决方法可以将这样的映射添加到您的属性:

sqlType: "varchar(20)"

所以你可以试试,但我不知道这是否适用于 joinTable。请查看此 jira 问题以获取更多信息:http://jira.grails.org/browse/GRAILS-8444

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多