2

私は3つの整数で構成されているが主キーがない素敵な小さなドメインクラスを持っています(データベースの設計が不十分なため...この書き直しは問題外です):

class Domain implements Serializable {

   Integer foo
   Integer bar
   Integer flag

    static mapping = {
        table 'domain'
        version false

        id  composite: ['foo', 'bar']
        foo column: 'foo_nbr'
        flag    column: 'value_I_want_flag'
        bar column: 'bar_nbr'   
    }
}

fooとbarの複合IDを使用して、読み取り関数を介してフラグにアクセスできるようにしたい

そのような

Integer yayFlag = Domain.read(foo, bar).flag

このためのベストプラクティスはありますか?

4

2 に答える 2

3

this のドキュメントによるget()と、プロトタイプ オブジェクトを使用して構文を介して参照できるはずです。

def d = Domain.get(new Domain(foo: 23, bar: 999))

また、 (id コンポーネント フィールドを使用して) hashCode()andを実装し、 class を作成することも推奨されていることに注意してください。 equals()Serializable

要件である場合read()は、同じことを試すことができますが、それが機能するかどうかを知るためにソースを検索していません (参照ドキュメントでget()は、上記のことができることを実際に明示的に示していないため、read()参照でそれを言っていません) docs は決定的なものではありません)。私はしばらく Grails から離れていましたが、後でフラッシュ時の DB 書き込みを回避することもできdiscard()ますget()

于 2012-12-06T17:39:56.007 に答える
2

それはできません。ブライアンが述べたように、プロトタイプインスタンスを作成する必要があります。使用したい構文を使用して、作業を行うヘルパーメソッドを作成できます。

static Domain read(int foo, int bar) {
   read new Domain(foo: foo, bar: bar)
}

getおそらく同様の方法が必要になるでしょう。

于 2012-12-06T18:09:36.167 に答える