2010-03-04 67 views
3

我正在通過舊數據庫創建Grails應用程序。
有一張表我想創建幾個不同的域對象(在我的例子中,Type1,Type2和Type3)。
該表是這樣的:使用GORM DSL將多個域對象映射到同一個表格

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' 

更新:

其實documentation說我可以使用鑑別器來實現這一點。

不過,我試圖把我的類,如下所示:

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

回答

5

好了,所以Grails文檔是不是最新的(it should though )。

解決的辦法是:

在BASETYPE類:

static mapping = { discriminator column:"type" } 

在子類:

static mapping = { discriminator value:"type1" } // or type2, type3, etc... 
+2

酷酷的偵探工作:) – 2010-03-04 22:51:16

0

The GORM Documentation似乎在暗示你可以,只要你的所有而TYPEx類擴展了一個公共基類

+0

是啊,我想這...但我的表沒有一個'class'專欄...我會嘗試將TYPE列映射到「class」鑑別符,看看它是否有效... – Philippe 2010-03-04 14:28:40

相關問題