促销活动
CodeGym University
学习
课程
任务
调查和小测验
游戏
帮助
提醒时间表
社区
用户
论坛
聊天
文章
成功故事
活动
评论
订阅服务
浅色主题
课程
评论
关于我们
开始
开始学习
立即开始学习
目标地图
课程
级别 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 (JO
Please enable JavaScript to continue using this application.