2009-08-03 13 views
12

対応するデータベーステーブルを自動的に作成した後、ドメインクラスを変更するための「標準的な慣行」がどのようになっているのか理解できません。Grailsでどのようにドメインクラスを変更しますか?

Grailsには「マイグレーション」はありません。生成する新しいSQLを出力するように指示する方法はありません。そのため、前のテーブル定義と比較して独自のALTER TABLEコマンドを手動で発行できますそれは私がdjangoでやっていることです)。

Grailsの「The Definitive Guide」という本を手に入れたばかりで、GrailsのWebサイトでは何も見つかりません。

答えて

4

これはgrailsの弱点であり、私はそれに対処する良い方法を知らない。私が行うのは、変更されたドメインクラスのコピーを作成し、変更されたドメインクラスのテーブルのSQLスキーマと、ドメインクラスのコピーによって生成されたものを比較することです。その後、元のテーブルに必要な変更を手作業で行う必要があります。私は、ドメインクラスのときに関係のようなものが変わる傾向があることを見出しましたが、フィールドをテキストタイプに強制する制約を追加するなどの変更は常に起こるとは限りません.......

+0

また、プロパティを削除すると、Grailsの列は削除されません。私はこれが安全のためであり、参照列を削除できるかどうかを "把握"したくないからだと確信しています。 – billjamesdev

+0

答えをありがとう!それはかなり悪いです!少なくともSQLをダンプすることができるので、古いものと新しいものを比較することができます。 フィールドを追加するだけで、「うまくいく」ことがわかりました。フィールドを削除すると、そのフィールドはデータベースに残ります。 (これは問題ありません。後でデータを必要としないことを確認したら、後で削除することができます) –

10

Grailsアプリケーションのデータベーススキーマを明示的に管理したい場合は、Grails Liquibase pluginまたはGrails autobase pluginをご覧ください。

+0

これらのプラグインが優れていると思っていますか? –

+0

どちらのプラグインもLiquibaseを使用してデータベースの変更を管理しているため、使用可能なリファクタリングは似ているはずです。しかし、私は両方のプラグインのコミュニティサポートなどについて全く知らない。 – Ruben

0

おそらく、データベースに依存しないアプリケーションのバックアップ/リストアモジュールの作成について考える必要があります(xmlやjsonにシリアル化される可能性があります).dbを変更すると、バックアップ/リストア、古いドメインデータが新しいドメインデータに「アップグレード」されるような方法で実行されます。あなたに出力を与えるだろう、私は..あなたも代わりに、コマンド「スキーマ輸出Grailsのを試すことができます

0

... Djangoは自動的にこれを行うが、theresの私は理解しないジャンゴでより多くのマジックができる方法が好き

テーブルと制約のためのすべてのcreateコマンドを持つsql。

これを参考にして、変更スクリプトを作成することができます。

..私は推測する現在利用可能な最良の厥

0

あなたは良いdocumentationを持ち、積極的に維持されているdatabase-migration pluginを試してみてください..あなたがより良い方法を見つける場合はお知らせください。

関連する問題