ホームページ  >  記事  >  Java  >  Hibernate はポリモーフィック マッピングをどのように実装しますか?

Hibernate はポリモーフィック マッピングをどのように実装しますか?

王林
王林オリジナル
2024-04-17 12:09:01476ブラウズ

Hibernate ポリモーフィック マッピングでは、継承されたクラスをデータベースにマッピングでき、次のマッピング タイプを提供します。 join-subclass: 親クラスのすべての列を含む、サブクラス用の別個のテーブルを作成します。 table-per-class: サブクラス固有の列のみを含む、サブクラス用の別個のテーブルを作成します。 Union-subclass: joined-subclass と似ていますが、親クラス テーブルがすべてのサブクラス列を結合します。

Hibernate 如何实现多态映射?

#Hibernate ポリモーフィック マッピング: 詳細な分析

はじめにオブジェクト指向プログラミングにおける, 継承されたクラスをデータベースにマップする必要がある状況がよく発生します。 Hibernate は、ポリモーフィック マッピング機能を通じてこの要件を簡単に達成できます。

#ポリモーフィック マッピング タイプHibernate は、継承されたクラス間の関係を処理するために、いくつかのポリモーフィック マッピング タイプを提供します。

    #joined-subclass
  • : サブクラスごとに個別のテーブルを作成し、親クラス テーブルのすべての列を含めます。
  • table-per-class
  • : サブクラス固有の列のみを含む、サブクラスごとに個別のテーブルを作成します。
  • union-subclass
  • : joined-subclass と似ていますが、親クラス テーブル内のすべてのサブクラス列を結合します。
実際的なケース

抽象クラス person
と 2 つのサブクラス Student および Teacher ## があるとします。 #。 Person クラスには id フィールドと name フィールドがあり、Student クラスには grade フィールドがあります。 Teacher クラスには salary フィールドがあります。 Hibernate マッピング構成

向け クラス:

@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Person {
  @Id
  private Long id;
  private String name;
  // ... 省略其他字段
}

学生向け クラス:

@Entity
public class Student extends Person {
  private Integer grade;
  // ... 省略其他字段
}

Teacher クラスの場合:

@Entity
public class Teacher extends Person {
  private Integer salary;
  // ... 省略其他字段
}

クエリの例

すべてのユーザーにクエリを実行するには、次のコードを使用できます:

Session session = sessionFactory.getCurrentSession();
List<Person> persons = session.createQuery("from Person", Person.class).list();
Hibernate継承戦略はサブクラス データを自動的にロードします。

利点

継承されたクラスのマッピングが簡素化されます。

すべてのサブカテゴリ データを一貫した方法で取得する多態性クエリをサポートします。
  • 継承戦略に従って、テーブル構造を最適化できます。

適切な継承戦略を選択することが重要であり、これはパフォーマンスと可用性の機能に影響します。

ポリモーフィック マッピングを使用する場合は、データベース テーブルの構造がマッピング構成と一致していることを確認する必要があります。

以上がHibernate はポリモーフィック マッピングをどのように実装しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。