2

デフォルトでは、ドメイン クラスを作成すると、すべてのドメイン クラス (テーブル) に「id」および「version」列が自動的に追加されます。「isChecked」などの列を追加したい場合、「id」列と「version」列が追加されるのと同様に、これがすべてのドメイン クラス (テーブルなど) に自動的に追加されます。どうすればこれを達成できますか。また、特定のドメイン クラスに対して「isChecked」を使用したくない場合は、それもできるはずです。

Grail 1.3.7 でこれを行うにはどうすればよいですか?

ありがとうございました。ジェイ・チャンドラン

編集:さらに入力を取得できますか? 提案された回答は機能しませんでした!

4

3 に答える 3

3

Groovy が提供するメタ プログラミング マジックをこの種のものに使用することもできますが、私はおそらく、より一般的な方法で継承を使用することになります。isChecked (およびその他の必要なもの) を含む親ドメインを作成し、それらを必要とするドメインにそのクラスを拡張させます。

于 2011-08-08T15:04:53.063 に答える
0

ドメインアーティファクトを変更(プロパティを追加)するプラグインを作成することをお勧めします。プラグインとアーティファクトの詳細を読むことができます。次に、静的プロパティ(たとえば、static nochecked = true)を簡単に追加して、新しいプロパティを追加したくないドメインアーティファクトを適切と思われるように除外できます。

于 2011-08-08T15:15:52.267 に答える
-1

これは、メタプログラミングを使用して行うことができます。プロパティを追加するコードdoWithDynamicMethodsは、プラグインのクロージャー内またはから実行する必要がありますBootstrap.groovy。プラグインアプローチを使用している場合は、次のように機能するはずです。

def doWithDynamicMethods = {ctx ->
  application.domainClasses
        .findAll {it.simpleName.startsWith('S')}.metaClass.each {domainMetaClass ->

    Integer fooVal = 0

    domainMetaClass.getFoo = {-> fooVal}
    domainMetaClass.setFoo = {Integer newFooVal -> fooVal = newFooVal}
  }
}

上記のコードはInteger foo、名前が「S」で始まるすべてのドメインクラスにプロパティを追加する必要があります。私はこのコードをテストしていないので、おそらく機能しません。あなたがより自信を持つことができる例を見るために:

  1. ドメインクラスを変更するプラグインを追加します(たとえば、フィールドまたはメソッドを追加します)
  2. ダウンロードする
  3. プラグイン記述子のdoWithDynamicMethodsクロージャーのコードを見てください
  4. コピー、貼り付け、ニーズに合わせて
于 2011-08-08T15:29:30.347 に答える