AI Academy
促銷
CodeGym University
學習
課程
任務
問卷 & 測驗
遊戲
說明
行程
社群
用戶
論壇
聊天
文章
成功故事
動態
評價
訂閱
淺色主題
課程
評論
關於我們
開始
開始學習
立即開始學習
My Progress
Courses
任務地圖
課程
Java
SQL & Hibernate
等級 15
使用實體層次結構
SQL & Hibernate
等級 15,
課程 0
保護問題 今天我們將有一個新的超級有趣的方案——使用Hibernate特性將類層次結構保存到數據庫中。 類層次結構是一組通過繼承關係相互關聯的類。 假設您要將三個類存儲在數據庫中: class User {
整個類層次結構的單個表
SQL & Hibernate
等級 15,
課程 1
描述 存儲類層次結構的下一個方法是將層次結構中的所有類存儲在一個表中。這種策略稱為單表。 例如,像這樣: CREATE TABLE user_ employee_client {
判別器
SQL & Hibernate
等級 15,
課程 2
描述 在上一課中,您看到 Hibernate 使用特殊的 DTYPE VARCHAR 列來存儲實體類的名稱。這樣的列稱為鑑別器。它用於明確確定為數據庫中的給定行創建哪個類。 您可以使用@DiscriminatorColumn註釋操作此列。例子: @DiscriminatorColumn(name="имя_колонки", discriminatorType = DiscriminatorType.INTEGER) 根據 JPA 規範,鑑別器可以有以下類型: 細繩 字符
連接表
SQL & Hibernate
等級 15,
課程 3
描述 在數據庫中存儲類層次結構的另一種策略稱為 Joined Table。它有一個特殊的註釋: @Inheritance(strategy = InheritanceType.JOINED) 我們班級的一個例子: @Inheritance(strategy = InheritanceType.JOINED)
每班表
SQL & Hibernate
等級 15,
課程 4
5.1 說明 最後,最後一個策略是每類表。這意味著每個類將使用一個單獨的表。從某種意義上說,這是同一個 MappedSuperClass,只是更新了形式。 首先,您需要使用註釋: @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
選擇層次結構保存策略
SQL & Hibernate
等級 15,
課程 5
描述 上述每種策略和技術都有其自身的優點和缺點。選擇特定策略的一般建議如下所示: 基於 UNION 的 TABLE_PER_CLASS 策略 如果不需要多態查詢和關聯,則最好選擇此策略。如果您很少做(或根本不做)“從用戶用戶中選擇用戶”。如果您沒有引用用戶的實體類,這是最好的選擇(因為您仍然可以添加優化的多態查詢和關聯)。 SINGLE_TABLE 策略 應使用此策略: a) 僅適用於簡單任務。在規範化和 NOT NULL 約束至關重要的情況下,應該首選策略 #3 (JOIN
Please enable JavaScript to continue using this application.