w Grails, Czy istnieje sposób na ograniczenie rozmiaru kolumny, na której mapowane jest wyliczenie. W poniższym przykładzie chciałbym typ kolumny, aby być char (2)Graum Enum Mapowanie
enum FooStatus {
BAR('br'), TAR('tr')
final static String id
}
class Foo {
FooStatus status
static constraints = {
status(inList:FooStatus.values()*.id,size:2..2)
}
}
zarówno inList i rozmiar nie mają żadnego wpływu podczas eksportowania schematu, typ kolumna zachowuje swoją wartość domyślną (varch (255)) Może mógłbym to zrobić, jeśli zdefiniuję nowy UserType. Dowolny pomysł ?
Dziękuję -ken
To dość denerwujące, że muszę dodać dla każdego wyliczenia typu getter i seter, a także zadeklarować go jako "przejściowy". Burt, czy niestandardowy UserType nie byłby bardziej eleganckim rozwiązaniem? – ken
Transient i getter/setter są opcjonalne, jeśli dobrze jest ustawić identyfikator Enum i przekonwertować identyfikator na instancję wyliczającą w kodzie wywołującym. Prawdziwą zmianą jest zachowanie łańcucha zamiast Enum (co było w pewien sposób sugerowane przez użycie inList(), ponieważ i tak nie działałoby to z Enum). Ale na pewno powinien działać niestandardowy UserType. Chcesz wydobyć typowe elementy do klasy bazowej, jeśli robisz to więcej niż raz. Wolałbym zachować wszystko w klasie domeny, o ile to możliwe, o ile zmiany nie są tak znaczące. –
Burt, tak masz rację, chcę móc ustawić i uzyskać zmienną statusu jako element wyliczający, a także być w stanie zapisać bazę danych, wykorzystując w ten sposób identyfikator w wyliczeniu. Przechodzę bardziej w kierunku niestandardowego typu użytkownika coś wzdłuż odwzorowania = {typ statusu: EnumUserType} – ken