2010-12-31 11 views
4

ドメインモデルを変更すると、Grailsは自動的にスキーマの変更(インデックス/外部キーの更新を含む)を行います。通常これは問題ありませんが、レガシーデータベースで作業する場合は、すべてのテーブルの変更を完全に無効にしたいと考えています。Grailsを使用して従来のデータベースを操作する際に、スキーマの自動修正を避けるにはどうすればよいですか?

Grails には、にインデックスと外部キー制約を含むテーブル構造を変更しないように指示するにはどうすればよいですか?

これは、私はセットアップに現在のマッピングをしました方法です:

class ClassName { 
    String string1 
    String string2 
    AnotherClass anotherClass 

    static mapping = { 
    version(false) 
    table("legacy_table") 
    string1(column: "some_legacy_field_1") 
    string2(column: "some_legacy_field_2") 
    anotherClass(column: "another_class_id", nullable: true, ignoreNotFound: true) 
    } 
} 

答えて

9

dataSourcevalidateに設定することができdbCreateプロパティは、スキーマを変更することなく、ドメインモデルと一致していることを確認した/grails-app/conf/DataSource.groovyで定義されていますそれはどんな方法でも。ここ

詳細: http://grails.org/doc/latest/guide/3.%20Configuration.html#3.3%20The%20DataSource

+3

ありがとうございます! dbCreate = noneがdbCreate = noneに設定されていることで解決されました。 – knorv

+3

またはdbCreateを完全に削除しても何も変更されません。 –

2

は、前述のように、プロパティのdbCreateを使用すると、データベースは、ドメインクラスに行われた変更があるたびに変更される方法を指定するために使用するものです。バートが提案したようにこのプロパティを完全に削除することをお勧めします。そのため、Hibernateはデータベースの更新方法を制御しないため、ドメインクラスの変更によって特定の競合が発生する可能性があります。

私のプロジェクトでデータベースの変更を管理する方法は、データベースの移行を使用することです。Liquibaseを使用することをお勧めします。Grailsは完全に機能するプラグインです。

関連する問題