2011-11-07 6 views
0

はの一つは、制約を使用して、文字列として優先プロパティを作成しましょう:grails enumまたはstringプロパティー、将来のdbアップデートの違いは何ですか?

priority(inList:['Critical', 'Major', 'Normal', 'Enhancement']) 

代替がenumをこのように使用される可能性があります。

enum Priority { CRITICAL, MAJOR, NORMAL, ENHANCEMENT } or 
enum Priority { CRITICAL('Critical'), MAJOR('Major'), NORMAL('Normal'), ENHANCEMENT('Enhancement') 

Priority priority 
    ... 

と、おそらく以下、どのように列挙型に応じて、上記で定義されています:

static mapping = { priority enumType:"ordinal"} 

私の質問は、将来の列挙型の値を追加するには、彼らがadde最後は?私は列挙型の値は次のように解釈されるものを変更したくない場合にも、これを行うための最善の方法は、前述したように、例えば、次のとおりです。

... NORMAL('Minor') 

または私は単純で3番目の項目を変更した場合、物事は、うまく動作しますしかし、私が望むリスト、例えば

MINOR or MINOR('Minor') 

答えて

2

表示される順番は関係ありません。内部的には、Grailsは文字列表現で与えられたvalueOfルックアップを行います。これで、データベースを適切に更新しないと、名前の変更によって問題が発生します。これが起こることがわかっている場合、プロダクションでは列挙型を再考し、参照のために型テーブルを参照してください。そうすれば、IDを使用しているだけなので、文字列の値が何であるかは関係ありません。

私は、一般的に安定して生産されることがわかっているハード定数と高速定数の列挙型のいくつかの並べ替えを使用する傾向があります。しかし、ユーザーがさまざまな値を追加/変更/削除できる必要がある場合や、ある種のデータウェアハウスがあることが分かっている場合は、テーブルをタイプしてください。ミルストレージシステム(MySQL、Postgresなど)の実行。

+0

超説明、ありがとうございます – Ray

+0

質問:「序数」マッピングメカニズムを使用するとどうなりますか?これは私にあなたの心の中でいくつかの良い "管理"能力を与えてくれますか? – Ray

関連する問題