2009-03-05 7 views
4

EnumSetがあり、一連のブール型の列にマップすると良いと思いました。これにより、SQLツールを使用して調べることが容易になり、使用可能な列挙型の値を変更することも容易になります。しかし、私は本当にこれのためにすべてのゲッターとセッターを手書きしたくありません。Hibernate Annotationsを使用してEnumSetを一連のブール型列に自動的にマップできますか?

誰かがこのオブジェクトを複数のプロパティに分割するために何らかの種類のハイバネートメタデータを使用する巧妙なソリューションを持っていますか?

ありがとうございます!

答えて

1

私が正しくあなたを理解していれば、のような列挙型のために:

public enum Color { RED, GREEN, BLUE; } 

あなたは、データベース内のそれぞれの可能な列挙値の1を3真/偽の列を持っているでしょう。その後、たとえば、赤と青を含むEnumSetにマップする必要があります。その場合は

RED GREEN BLUE 
true false true 

、私が知っている唯一の方法は、のorg.hibernate.usertype.UserTypeの独自の実装を書くことです。 Hibernateのサイトで利用可能ないくつかの例があり、例えばhereのようにかなり簡単な作業です。

を編集してください:私はちょっとしたことがやや複雑になるはずです。

  1. 使用org.hibernate.usertype.ParameterizedTypeと列挙型クラスによって、ユーザタイプがパラメータ化します:あなたはあなたのアプリケーション内のすべての可能なEnumSetのための1つのHibernate型のマッピングを持っているしたい場合は、次の操作を行う必要があります。
  2. enumクラスの値に応じて、読み書きする列の数と列を決定します。
  3. EnumSetが使用されるたびにタイプをインスタンス化します。
  4. 複数のセットを1つのテーブルにマッピングする可能性と、新しい列挙値を追加することが既存のタイプの動作にどのように影響するかを考慮してください。

これは、1日の仕事には簡単に足りるかもしれませんが、かなりやりがいのあるようです。あなたがここからそれを理解することを願っています。

+0

ありがとう...私は手作業でやっていましたが、おそらく唯一の解決策です。 –

関連する問題