2010-02-17 59 views
2

根據the Grails GORM guide,域類的子類與父類共享同一個表,除非tablePerHierarchy設置爲false。抽象類的TablePerHierarchy總是false?

我無法找到下面的映射語句是否是因爲「抽象」的關鍵字

abstract class Item implements Comparable{ 
    static mapping = { 
    tablePerHierarchy true 
    } 
... 

我的數據庫不包含項目表,每個子類一個表的忽略信息(期望的狀態tablePerHierarchy ==假)。

我是否需要使項具體但不允許它在驗證中?我計劃在創建表單中選擇一個使用<選擇>的子類的ItemController。

回答

4

我敢肯定,你來的這一些分辨率了,但我今天遇到了同樣的問題,所以我想我會附和。

在Grails的/格姆文件,第5.2節。 3,它聲明「GORM支持從抽象基類和具體持久GORM實體的繼承」 (http://www.grails.org/doc/1.0.x/guide/5.%20Object%20Relational%20Mapping%20(GORM).html)。

有趣的是,他們沒有提供本節例子中的抽象類的例子。

我試過了,在我的層次結構中有一個抽象類(都在層次結構的頂部,然後再沿着其中一個分支)。每次我試圖堅持一個抽象的子類的對象時,我都沉默了。

我首先從層次結構的頂部移除了抽象關鍵字,並且我得到了更積極的結果。最後,我從層次結構中的所有分支中刪除了抽象關鍵字,並且一切正常。

所以,我的結論是,在實踐中,你可以在Gorm層次結構中使用abstract關鍵字是不正確的。

所以我的計劃層次是一些簡單數據類型的實例: 抽象類型< - 混凝土文本< - 具體地址 抽象類型< - 抽象的數字< - 混凝土積分 抽象類型< - 抽象的數字< - 混凝土十進制

必須成爲: 具體類型< - 混凝土文本< - 具體地址 具體類型< - 具體數字< - 混凝土的Integra l 混凝土類型< - 具體數字< - 具體十進制

即使我不打算直接創建Type或Numeric的實例。

對於披露,我仍然使用Grails 1.1.2,直到我感覺1.2足夠穩定。