3

私はすでにいくつかの答えを探しましたが、私は十分に満足していません. これが重複しないことを願っています。

一定でなければならないデータを含むアプリケーションがあります。このデータは後で変更できるため、現在のアプローチでは、他のテーブルから参照されるこの定数を含む別のテーブルを使用していました。このテーブルには、たとえば列 ID と列値があります。このテーブルは、ID と値を持つ Java オブジェクトによって表されます。

私の問題は、この定数を比較したいときに発生します。そのIDを使用して比較するのは私には見苦しいので、列挙型を使用してそれらを比較します。しかし、「タイプ」として使用されるクラス内で ENUM を使用するため、これは厄介に思えます。JPAの@enumeratedアノテーションでも考えていましたが、正直なところ、それを行う最善の方法はわかりません。私が確信しているのは、DBに保存されているこの一定のデータがどうしても欲しいということです。

4

3 に答える 3

2

頭のてっぺんに、次のようなアプローチが考えられます。

  1. その名前を作成enumしてDBにマップします。このアプローチは単純で、機能します。その欠点は、DB内の文字列が多すぎることです。したがって、列挙型要素名が変更されている場合は、DBを修正する必要があります。文字列はスペースを占めます。また、このようなフィールドをクエリ条件で使用する場合は、インデックスを作成する必要があります。
  2. enumその序数を作成してDBにマップします。これも簡単ですが、列挙型要素の1つの順序が変更されても、DBはメンテナンスが必要です。また、DBデータは読みにくくなります。

#1と#2の両方に共通の欠点があります。実際には、データは2回保存されます。1回は列挙型としてハードコーディングされています。DBで2回。データを変更する必要がある場合は、2か所で変更する必要があります。enum再コンパイルする必要があるため、開発中に変更を行う必要があります。

ただし、いわゆる「動的列挙型」を提供する他のソリューションがあります。見てください。おそらくこの解決策はあなたを助けるでしょう。

于 2012-11-13T13:35:15.160 に答える
0

後で変更できるデータは、もはや定数ではなく可変です... ;-)

とにかく、可能な値のリストが時間の経過とともに変化する可能性がある場合、列挙型と @enumerated JPA アノテーションを使用しても問題はないと思います。

値自体が変更される可能性がある場合は、比較に ID を使用しないようにするために、ある種の名前と値のマッピングが必要になります。データの変数部分に使用できる「プロパティ」を列挙型に追加することもできます。そうすれば、列挙型の名前のみが定数文字列としてデータベースに (識別子として) 格納され、「値」はコードで変更できます。

http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html

于 2012-11-13T14:05:53.323 に答える
0

もう 1 つのオプションは、文字列フィールドを使用して列挙型をデータベース テーブルに格納し、他のオブジェクトで使用するために戻る途中でそれらをラップすることです。

次のいずれかのようになります。

文字列を列挙型に変換しますか?

http://www.vineetmanohar.com/2010/01/3-ways-to-serialize-java-enums/

于 2012-11-14T00:26:33.850 に答える