2012-04-04 8 views
0

die folgenden Domain-Klassen in Grails Bedenken Sie:Grails Gorm DDL nicht in Postgres 9, wenn ein träges Laden Aufzählungstyp

enum MyEnum { One, Two, Three } 

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

Wenn es mit der App läuft 'create-Drop' auf einer Postgres 9.1 Datenbank ich folgende Fehlermeldung erhalten :

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

Der Fehler verschwindet, wenn ich die Lazy Mapping entfernen. Der Faule ist jedoch aus anderen Gründen notwendig. Meine aktuelle Problemumgehung besteht darin, die Datenbank ohne das Lazy-Mapping zu erstellen und anschließend Domänenklassen zu ändern, was in einem Entwicklungskontext sehr ärgerlich ist.

Haben Sie Ideen, wie Sie das Gorm-Mapping korrigieren können, so dass varchar (-1) wie gewohnt varchar (255) ist?

+0

Verwenden Sie einen bestimmten Dialekt in DataSources.groovy? –

+0

Ich habe versucht, org.hibernate.dialect.PostgreSQLDialect und net.sf.hibernate.dialect.PostgreSQLDialect mit dem gleichen Ergebnis. – johanneslink

Antwort

0

Beachten Sie, dass Ihre Tabelle normal erstellt wird, wenn Sie eine Enum in einer Domäne-Klasse verwenden aber eine Zuordnung für die Enumeration nicht angeben. Wenn Sie jedoch Ihre enum-Eigenschaft im Mapping-Block angeben, haben Sie Probleme. Es gibt eine Problemumgehung eine Zuordnung wie diese, um Ihr Eigentum und fügt hinzu: wenn

sqlType: "varchar(20)" 

So könnten Sie versuchen, aber ich weiß nicht, ob dies in einem joinTable funktioniert. Werfen Sie einen Blick auf diese Jira-Frage für weitere Informationen: http://jira.grails.org/browse/GRAILS-8444