4

一連のブール列にマップするとよいと思ったEnumSetがあります。これにより、SQLツールを使用した検査が容易になり、使用可能な列挙値の変更に対する耐性も高まります。ただし、このためにすべてのゲッターとセッターを手書きしたくはありません。

ある種の休止状態のメタデータを使用してこのオブジェクトを一連のプロパティに分割する巧妙なソリューションを持っている人はいますか?

ありがとう!

4

1 に答える 1

1

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

public enum Color { RED, GREEN, BLUE; }

データベースには、可能な列挙値ごとに 1 つずつ、3 つの true/false 列があります。次にEnumSet、たとえば RED と BLUE を含むものを次の場所にマップする必要があります。

RED    GREEN    BLUE
true   false    true

その場合、私が知っている唯一の方法は、 の独自の実装を作成することですorg.hibernate.usertype.UserType。これは非常に簡単な作業で、いくつかの例が Hibernate サイトや、たとえばhereにあります。

編集:物事はもう少し複雑でなければならないことに気付きました。アプリケーションで可能なすべてに対して 1 つの Hibernate タイプ マッピングをEnumSet使用する場合は、次の手順を実行する必要があります。

  1. org.hibernate.usertype.ParameterizedType列挙型クラスによってユーザー型をパラメーター化できるようにします。
  2. enum クラスの値に応じて、読み書きする列の数と列を決定します。
  3. EnumSetanが使用されるたびに型をインスタンス化します。
  4. 1 つのテーブルで複数のセットをマッピングする可能性と、新しい列挙値を追加すると既存の型の動作にどのように影響するかを検討してください。

これは簡単に 1 日かかる作業になりますが、かなり実行可能のようです。ここから理解していただければ幸いです。

于 2009-03-08T23:36:42.373 に答える