2009-08-03 10 views
12

Nie mogę określić, w jaki sposób "standardowa praktyka" polega na modyfikacji klasy domeny po tym, jak automatycznie utworzono odpowiednią tabelę bazy danych.Jak modyfikujesz klasę domeny w Grails?

Nie ma "migracji" w Grails, i nie ma możliwości, żebym mógł ją znaleźć, aby wyprowadzić nowy SQL, który by wygenerował, abyś mógł porównać go z poprzednią definicją tabeli i ręcznie wydać własne polecenie ALTER TABLE (to właśnie robię w django).

Właśnie dostałem książkę "The Definitive Guide to Grails" i milczy na ten temat, i nie mogę znaleźć niczego na stronie Grails.

Odpowiedz

4

To jest słaby punkt grails i nie znam dobrego sposobu by poradzić sobie z tym. Co mogę zrobić, to utworzyć kopię zmodyfikowanej klasy domeny, a następnie porównać schemat SQL tabeli zmodyfikowanej klasy domeny z tym wygenerowanym przez kopię klasy domeny. Następnie musisz ręcznie wprowadzić zmiany niezbędne do oryginalnego stołu. Zauważyłem, że rzeczy takie jak relacje zmieniają się, gdy robi się klasa domeny, ale rzeczy takie jak dodanie ograniczenia zmuszającego pole do bycia tekstem nie zawsze się zmieniają ..........

+0

Usunięcie właściwości NIGDY nie usuwa kolumny w Grails. Jestem pewien, że jest to dla bezpieczeństwa i dlatego, że nie chcieli "wymyślić", czy mogliby usunąć kolumnę referencyjną. – billjamesdev

+0

Dzięki za odpowiedź! To bardzo źle! Przynajmniej może zrzucić SQL, dzięki czemu można porównać stare i nowe. Zauważyłem, że jeśli po prostu dodajesz pole, to "po prostu działa". Jeśli usuniesz pole, pozostawisz je w bazie danych. (Co jest w porządku, możesz upuścić go później, gdy jesteś pewien, że nie potrzebujesz danych.) –

10

Jeśli chcesz jawnie zarządzać schematem bazy danych dla aplikacji Grails, sugeruję zapoznać się z Grails Liquibase plugin lub Grails autobase plugin.

+0

Czy masz pojęcie, która z tych wtyczek jest lepsza? –

+0

Obie wtyczki używają Liquibase do zarządzania zmianami w bazie danych, więc dostępne refaktoryzacje powinny być podobne. Ale nie mam pojęcia o wsparciu społeczności itp. Obu wtyczek. – Ruben

0

Być może powinieneś pomyśleć o stworzeniu modułu tworzenia kopii zapasowych/przywracania dla swojej aplikacji, który jest niezależny od bazy danych (może być serializowany do xml lub json) - w ten sposób, po zmianie bazy danych, modyfikujesz również tworzenie kopii zapasowych/przywracanie, w taki sposób, aby stare dane domeny zostały "uaktualnione" do danych w domenie ne.

Lubię jak Django może to zrobić automatycznie, ale tam więcej magii w Django, że ja nie rozumiem ...

0

można również alternatywnie spróbować „grails schematu wywozu” polecenia .. co daje wyjście sql, który ma wszystkie polecenia tworzenia dla tabel i ograniczeń ..

Dzięki temu jako punktowi odniesienia można tworzyć skrypty alter. Ów najlepszy obecnie dostępny Chyba ..

daj nam znać, jeśli okaże się lepszy sposób ..

Powiązane problemy