首頁 > Java > java教程 > Hibernate 如何處理子類別鑑別?

Hibernate 如何處理子類別鑑別?

WBOY
發布: 2024-04-17 21:12:01
原創
692 人瀏覽過

Hibernate 使用 discriminator 列來進行子類別鑑別,提供了聯合表、單表和類別層次結構等策略:聯合表:為每個子類別建立單獨的表。單表:為所有子類別建立一個表,用 discriminator 欄位區分。類別層次結構:用基底類別表儲存父類別屬性,用子類別表儲存子類別屬性。

Hibernate 如何处理子类鉴别?

Hibernate 如何處理子類別鑑別

簡介

在物件導向編程中,子類別經常用於從基本類別派生新功能。 Hibernate 為處理物件繼承提供了不同的策略,包括聯合表、單表和類別層次結構。

子類別鑑別

子類別鑑別是指確定給定實體是哪一種子類別的過程。 Hibernate 使用 discriminator 欄位來儲存識別子類別的資訊。

策略

Hibernate 提供了三種主要策略來處理子類別鑑別:

  • ##「聯合表:為每個子類別建立單獨的表,並使用額外的列來儲存子類型資訊。
  • 單表:為所有子類別建立一個表,並使用 discriminator 欄位來區分它們。
  • 類別層次結構:使用基底類別表來儲存父類別屬性,並使用子類別表來儲存子類別屬性。

實戰案例:

假設我們有一個

Person 基底類別和兩個子類別StudentEmployee。以下是如何使用單表策略處理子類別鑑別:

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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板