1

ここで説明されているように、具体的なクラスごとのテーブルを参照しています:具体的なクラスごとのテーブル

9.1.6 の例に従って、CashPayment と CreditCardPayment があり、両方のスーパークラスが抽象Payment クラスであるとします。

「具象クラスごとのテーブル」タイプのマッピングを使用している場合、CASH_PAYMENT と CREDIT_PAYMENT の 2 つのテーブルがあり、PAYMENT テーブルはありません。それはすべて問題ありません。

ただし、支払い (現金または CC) への参照/プロパティを含む Xyz という別のエンティティ タイプを作成するにはどうすればよいですか? Java の観点からは問題ありません: Xyz.pamentType ですが、HBM/注釈でこれを構成するにはどうすればよいですか? XYZ テーブルはどのようになりますか?

PAYMENT_ID 列があるかもしれませんが、参照するテーブルが 2 つある可能性があるため、明らかに外部キーにすることはできません。XYZ には、支払いの種類を示すために何らかの追加の列が必要になると思います。

それとも、Hibernate は ID を使用して両方のテーブルを結合し、Xyz のインスタンスを読み取るたびに正しいタイプを見つけますか?

ちなみに、これが悪いアプローチであることはわかっています。もっと単純な代替手段を使用できますが、(代替手段ではなく) 答えが役立つので、質問を単純化しました。ありがとう!

4

1 に答える 1

0

Payment との関係を作成するだけで、設定することはほとんどありません。次に例を示します。

@OneToOne private Payment payment;

次に、それに値を割り当てて永続化します。

支払いの種類を調べるために追加の列は使用されません。Payment Hibernate のタイプを判別するには

  • の和合を作る
    • CashPayment へのクエリの結果
    • CreditCardPayment テーブルへのクエリの結果。
  • これらの選択ステートメントには、タイプを示す選択リストに追加の項目が含まれています。
  • 外部選択は、ネストされたクエリ (ユニオンの結果) から値をフェッチします。追加の属性は、Payment のインスタンスを作成するときに使用される具象クラスを決定します。
于 2013-06-12T10:40:47.600 に答える