前の質問への回答 (回答はこちら: SQL/Database Views in Grails ) に従って、ドメイン クラスを使用してデータベース内のビューを表現しようとしました。ただし、ほとんどの場合、これはうまく機能します。
一意のキーが 1 つもないビューがあります。基になるテーブルが次のようになっているとします。
A:
id,varX
1,"Blah"
2,"Foo"
3,"Bar"
B:
id、A.id、C.id
1,2,1
2,2,2
3,3,1
C:
id,varY
1,"ブーム"
2,"フィズル"
私のビューは次のようになります:
A.id,varX,B.id,C.id,varY
1,"Blah",NULL,NULL,NULL
2,"Foo",1,1,"Boom"
2,"Foo" ,2,2,"フィズル"
3,"バー",3,1,"ブーム"
それこそが、私たちの目的にとってまさにそのように見えるべきです。ただし、ご覧のとおり、ビューに対して作成できる最適な一意の複合 ID は ['A.id','C.id'] です。これは各要素を一意に識別するためですが、Grails は処理できないように見えるため失敗します。複合 ID の一部が NULL である (実際には、list() は 4 つのオブジェクトのリストを返します。最初のオブジェクトはヌル ポインターで、残りはビューの実際のドメイン インスタンスです)。
A.id と B.id を使用することもできますが、同じ問題があることに注意してください。
また、テーブル A の要素を少なくとも 1 回 (テーブル B/C に見つからないフィールドには null 値を使用して) 表示したいことにも注意してください。テーブル B に複数の対応するエントリがある場合は、おそらく何度も表示します。
だから、私の質問は 2 つの部分です:
1: ID フィールドがまったくない grails ドメインクラスを定義することは可能ですか? ビュー エントリの永続的なハンドルは必要ありません。そのビューのデータを一覧表示するだけで済みます。
2: そうでない場合、複合 ID フィールドを持つ grails ドメイン クラスを定義することは可能ですか?
関連するドメイン クラスを使用せずに直接 Groovy SQL を使用してビューを直接クエリできることはわかっていますが (現在実際にこれを行っています)、理想的にはドメイン クラスでビューを表現したいと考えています。さらに、すべての議論は別として、これら 2 つの質問は、特定の問題だけに適用するよりも、はるかに一般的に適用できます。