2012-02-08 4 views
3

GORMとHibernateのGrailsを使用して、リスト<の文字列>を1つのVARCHARカラムに永続化したい。私は、Hibernateのカスタム型を書かれているが、GORM/Hibernateは、永続としてリストフィールドを処理するために取得する方法を見つけ出すことはできません。GORMとHibernateを使用してリスト<String>を単一の列に永続化するにはどうしたらいいですか?

class User { 
    List<String> listOfStrings 
    static mapping = { 
     listOfStrings(type: StringListType, length: 512) 
    } 
} 

「listOfStrings」マッピングは無視されます。何か案は?今のところ、私は問題を回避するために余分なStringフィールドとset/getを使ってリストをエンコードしてデコードします。

+0

'@Type(..)'アノテーションを使用できませんか? – Bozho

答えて

2

私は以前にカスタムタイプを書いていませんでしたが、あなたはlistOfStringsを一時変数にして、ストリングのマーシャルとアンマーシャリングを行うイベントハンドラを用意しています。例えば。 onLoadはlistOfStrings = internalVarName.split()を実行し、onUpdateはinternalVarName = listOfStrings.join(' ')を実行できます。

GORMはタイプの特定のコードを含む関連付けに対して特別な処理を行うことができるので、List of Stringsを独自のタイプにラップすることもできます。私は事実のためにそれを知りません、ちょうど推測。

+0

あなたの答えの最初の部分は本質的に私がやったことです。私は実際にListOfStrings型を作成しなくてもよいようにしたいと思っていません。現在の回避策を使用することをお勧めします。 –

+0

私は第二の選択肢がよりメリットがあると思います。最初のオプションでは、文字列の中に区切り文字があるとどうなりますか? –

+0

@Matt - 第2の解決策はより構造的に純粋であると約束しましたが、あなたが新しいクラスの作成などの頭痛を経験するかどうかによって異なります。最初の解決策は仕事を完了し、区切り記号まで明らかに期待するデータの種類に依存します。たとえば、複数選択のドロップダウンの場合、デリミタを簡単に管理できます。 –

関連する問題