Grails Enum-Mapping
in Grails gibt es eine Möglichkeit zu der Begrenzung der Größe der Spalte an, die die enum abgebildet wird. Im folgenden Beispiel möchte ich die Spalte Typ char(2)
enum FooStatus {
BAR('br'), TAR('tr')
final static String id
}
class Foo {
FooStatus status
static constraints = {
status(inList:FooStatus.values()*.id,size:2..2)
}
}
beide inList und Größe haben keine Auswirkungen beim Export schema, in der Spalte Typ hält seinen Standard-Wert (varch(255))
Vielleicht könnte ich das tun, wenn ich eine neue definieren UserType. Irgendeine Idee ?
Danke
-ken
InformationsquelleAutor der Frage ken | 2010-09-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube es ist nicht direkt möglich, da die Art und Weise Enumerationen zugeordnet werden intern in GORM. Aber ändern Sie den code, das funktioniert:
und
Addition der transient getter und setter können Sie entweder die Zeichenfolge (id) oder enum-Wert.
InformationsquelleAutor der Antwort Burt Beckwith
Grails Schiffe mit einem undokumentierten (soweit ich kann jedenfalls sagen) custom-Hibernate-mapping für enums. Die Klasse ist org.codehaus.groovig.grails.orm.hibernate.cfg.IdentityEnumType. Es wird nicht können Sie die Spalte Größe, aber macht es einfach zu ändern, was gespeichert wird in der DB für jeden enum-Wert, ohne dass Sie transiente Felder zu Ihrem Modell.
Können Sie ausführen ein 'alter table' in der Bootstrap.groovy-zum verkleinern der Spalte:
InformationsquelleAutor der Antwort David Tinker
Sogar einfacher (funktioniert zumindest in Grails 2.1.0+)
InformationsquelleAutor der Antwort Alex Abdugafarov
Da GORM 6.1 Identität enum-mapping aktiviert werden kann, mit einem solchen Konstrukt
InformationsquelleAutor der Antwort Semyon Atamas