レガシー データベース上に grails アプリを作成しています。
いくつかの異なるドメイン オブジェクト (以下の例では Type1、Type2、および Type3) を作成したいテーブルがあります。
テーブルは次のようになります。
ID TYPE DESCRIPTION
1 type1 description of a type1 object
2 type1 description of another type1 object
3 type2 description of a type2 object
4 type3 description of a type3 object
...
行が異なる概念を表すため、それぞれが「説明」という名前のフィールドを含み、特定の「タイプ」に対応する 3 つの異なるドメイン クラスを作成したいと思います。
行をタイプ別にフィルタリングできるような制約はありますか?
つまり、次のようなことができますか:
class Type1 {
String type
String description
static mapping = {
table 'mytable'
}
static constraints = { type == 'type1' } // Is there anything like this ?
}
次に、 Type1.list() が次のようなクエリを生成することを期待します。
SELECT type, description
FROM mytable
WHERE type = 'type1'
アップデート :
実際、ドキュメントには、これを実現するためにディスクリミネーターを使用できると書かれています。
ただし、次のようにクラスを設定しようとしました:
class Type1 extends BaseType {
static mapping = {
discriminator column:'type', value: 'type1'
}
}
休止状態の SQL トレースを有効にしましたが、代わりに
SELECT ... FROM mytable WHERE type = 'type1'
そうですか
SELECT ... FROM mytable WHERE class = 'type1'
ディスクリミネーターが私のカスタム列名を完全に無視しているようです:-(
Grails 1.2.1 を使用しています