0

Vehicle ドメイン オブジェクトを作成する必要があります。すべての Vehicle オブジェクトには約 5 つのプロパティがありますが、大したことではありません。クラスに @Entity のアノテーションを付け、@Id のアノテーションが付けられた ID を平手打ちします。私の問題は、説明する必要がある特殊車両が他に 2 種類あることです。1 つは 2 つの追加の文字列値を保持する必要があり、もう 1 つは文字列のリストを保持する必要があります。

私は findAll() を実行してすべての車両を取得できるようにしたいので、他の 2 種類の車両用に完全に別個のドメイン オブジェクトを作成し、完全に別個のテーブルを用意することにあまり自信がありません。「AdditionalProperties」抽象クラスを作成し、それを Vehicle のメンバーにして、2 台の特殊車両用に拡張するというアイデアをいじくり回しましたが、適切な方法で注釈を付けてデータベースにマップする方法がすぐにわかりませんでした。しかし、それでも、vechicle のタイプをチェックしてそのクラスをキャストするなど、多くのモノリシックな if ステートメントを書くことに行き詰まります。

私のもう 1 つの考えは、現在持っている単一の Vehicle ドメイン オブジェクトに追加のフィールドを含め (他のすべての種類の車両には意味がありませんが)、値を null のままにすることでした。特殊車両。

クラスに注釈を付ける方法の例をいくつか挙げて、これにどのようにアプローチするべきかについて誰か考えがありますか?

4

1 に答える 1

3

Vehicle の 2 つのサブクラスを作成し、追加のプロパティを含めてみませんか? Hibernate は継承を問題なくサポートしています。エンティティの継承ツリーを永続化するには、次の 3 つのオプションがあります。

  • すべてを 1 つのテーブルに (多くの場合、最も高速で最も単純なオプション)
  • 独自のテーブル内のすべてのエンティティ
  • 共通テーブル内の共通プロパティ、および独自のテーブル内の追加のサブエンティティ プロパティ。

どのソリューションを選択しても、ビークルを選択すると、基準を満たすすべての種類のビークルが選択されます。Hibernate クエリは多態的です。

ドキュメントを読んでください。

于 2012-11-01T12:19:42.960 に答える