延迟加载枚举类型时,Grails Gorm DDL在Postgres 9中失败

延迟加载枚举类型时,Grails Gorm DDL在Postgres 9中失败,grails,enums,gorm,postgresql-9.1,Grails,Enums,Gorm,Postgresql 9.1,考虑Grails中的以下域类: enum MyEnum { One, Two, Three } class MyClass { Collection mys = [] static hasMany = [ mys: MyEnum ] static mapping = { mys lazy: true } } 在Postgres 9.1数据库上运行带有“create drop”的应用程序时,我遇到以下错误: Unsucce

考虑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)有什么想法吗?

请注意,如果您在域类中使用枚举,但没有为枚举指定映射,则表将正常创建。但是,如果在映射块中提到enum属性,则会出现问题。将这样的映射添加到属性中有一种变通方法:

sqlType: "varchar(20)"

所以你可以试试,但我不知道这在joinTable中是否有效。关于更多信息,请查看jira问题:

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