ホームページ >Java >&#&チュートリアル >Hibernate はサブクラスの識別をどのように処理しますか?

Hibernate はサブクラスの識別をどのように処理しますか?

WBOY
WBOYオリジナル
2024-04-17 21:12:01694ブラウズ

Hibernate は、サブクラスの識別に識別子列を使用し、ユニオン テーブル、単一テーブル、クラス階層などの戦略を提供します。 ユニオン テーブル: サブクラスごとに個別のテーブルを作成します。単一テーブル: 識別子列によって区別される、すべてのサブクラスのテーブルを作成します。クラス階層: 基本クラス テーブルを使用して親クラス属性を保存し、サブクラス テーブルを使用してサブクラス属性を保存します。

Hibernate 如何处理子类鉴别?

#Hibernate がサブクラス識別を処理する方法

はじめに

オブジェクト指向プログラミングにおけるでは、サブクラスは、基本クラスから新しい機能を派生するためによく使用されます。 Hibernate は、ユニオン テーブル、単一テーブル、クラス階層など、オブジェクトの継承を処理するためのさまざまな戦略を提供します。

サブクラス識別

サブクラス識別は、特定のエンティティがどのサブクラスであるかを決定するプロセスです。 Hibernate は、

discriminator 列を使用して、サブクラスを識別する情報を保存します。

戦略

Hibernate は、サブクラスの識別を処理するための 3 つの主要な戦略を提供します。

  • ユニオン テーブル: 別のテーブルを作成します。各サブクラスのテーブル。サブタイプ情報を格納する追加の列が含まれます。
  • 単一テーブル: すべてのサブクラスのテーブルを作成し、識別子列を使用してそれらを区別します。
  • クラス階層: 基本クラス テーブルを使用して親クラス属性を保存し、サブクラス テーブルを使用してサブクラス属性を保存します。

実際のケース:

基本クラス

person と 2 つのサブクラス Student および # # があるとします。 #従業員###。単一テーブル戦略を使用してサブクラスの識別を処理する方法は次のとおりです:

import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;

@Entity
@Table(name = "Person")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "type", discriminatorType = DiscriminatorType.STRING)
public class Person {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

}

@DiscriminatorValue("Student")
public class Student extends Person {
    private String grade;
}

@DiscriminatorValue("Employee")
public class Employee extends Person {

以上がHibernate はサブクラスの識別をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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