2010-12-19 86 views
1

我的grails應用程序使用了很多枚舉,但是對於枚舉的當前GORM解決方案並不令人滿意,因爲它暗示數據在代碼中,因爲GORM不會將枚舉映射到數據庫中。在grails中將枚舉映射到數據庫上

以前我們使用了一個包含不同類型枚舉的大表,例如:一個表中的縣和城市選擇。因此,數據庫中的表格將包含3列:枚舉類型(縣或城市),ID和名稱(哪個縣或城市)。

現在我想將它們切換爲真正的枚舉,但對於GORM來說這似乎不太可能。我試圖在域類中使用瞬變來做到這點,但AFAIK它仍然要求你有一個靜態枚舉已經存在供類引用。

我完全迷失在這裏,有人可以告訴我從哪裏或哪個功能我可以得到我想要的東西嗎?

回答

0

也許這個代碼是你想要什麼:

enum UserOrderState 
{ 
    WAITCHECK("Ожидает проверки"), 
    INWORK("Выполняется"), 
    DONE("Выполнен"), 
    CANCELED("Отменен"), 
    NOPRODUCT("Нет в наличии") 

    String name 

    UserOrderState(String name) 
    { 
     this.name = name 
    } 

    static list() 
    { 
     [ WAITCHECK, INWORK, DONE, CANCELED, NOPRODUCT ] 
    } 
} 

然後在.gsp可以使組合框這樣:

<g:select 
    name="state" 
    from="${internetshop.UserOrderState.list()}" 
    value="${fieldValue(bean: order, field: 'state')}" 
    optionValue="name" 
/> 
+0

感謝您的回覆,但這是我想要避免的:代碼中的數據。 – b4283 2010-12-19 09:13:49

+1

但這是在域中使用枚舉進行編碼的唯一方法。另一種方法是以域UserOrderState爲例。 – Stan 2010-12-19 09:34:25

1

簡單,不要用枚舉數據是不是靜態的,不太可能改變。相反,使用常規的域類並引導所需的數據。

+0

感謝您的回覆,畢竟我猜連接表是不可避免的。 – b4283 2010-12-20 13:24:35

+0

是的,但GORM會爲你做,而且SQL處理這些日子非常不錯,所以這不應該是AFAIK的問題。 – mfloryan 2010-12-20 21:47:40