首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Hibernate,单表继承和使用来自超类的字段作为鉴别器列

关于Hibernate,它是一个开源的对象关系映射(ORM)框架,可以将Java对象映射到关系型数据库中的表。Hibernate提供了一种简单的方式来实现持久化操作,使得开发人员可以专注于业务逻辑而不需要关注底层的数据库操作。

单表继承是Hibernate中的一种继承策略,它将所有的子类对象都映射到同一张表中,通过在表中添加一个鉴别器列来区分不同的子类对象。使用来自超类的字段作为鉴别器列是单表继承中的一种常见做法,可以避免在表中添加额外的鉴别器列,同时也可以保证数据的一致性。

在单表继承中,可以使用以下方式来定义鉴别器列:

代码语言:java
复制
@Entity
@Table(name = "employee")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "employee_type", discriminatorType = DiscriminatorType.STRING)
public class Employee {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "employee_type")
    private String employeeType;

    // 其他属性和方法
}

在上述代码中,使用了@DiscriminatorColumn注解来定义鉴别器列,并指定了鉴别器列的名称和类型。同时,在子类中不需要再次定义鉴别器列,Hibernate会自动使用超类中定义的鉴别器列来区分不同的子类对象。

总之,Hibernate是一个强大的ORM框架,可以帮助开发人员更加高效地实现数据持久化操作。单表继承是Hibernate中的一种继承策略,可以将子类对象映射到同一张表中,通过使用来自超类的字段作为鉴别器列来区分不同的子类对象。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Hibernate【映射】续篇

组件映射 Java主要主要有两种方式 组合关系,组合关系对应就是组件映射 继承关系,继承关系对应就是继承映射 组件映射实际上就是将组合关系数据映射成一张,组件被包含组件映射成一张...结构 我们应该是这样:idname从Animal中继承,catchMouse是子类具体行为。 ?...鉴别器字段:作用是在数据库中区别每一个子类信息, 就是一个 discriminator-value="cat_" 指定鉴别器字段,即type_字段值 如果不指定,默认为当前子类全名 --...SQL 我们即将使用是:每个子类映射成一张,父不对应…这和我们传统方式继承是一样。...因此.hbm.xml就给出了几个节点供我们使用,分别有以下情况: 子类父共有一张subclass 不符合数据库设计规范 需要使用鉴别器 子类、父都有自己joined-subclass,那么就是三张

76360

初识Hibernate继承映射

例如: 如图,studentteacher共同具有id,name,age等字段,而我们继承映射就是这样一个思想,抽象出这些共有的字段为一张父,让子表对其进行继承,这样就可以大大降低我们实体代码冗余性...--指定鉴别器名称类型--> <property name="name...table="newTable"则指定了新名,鉴别器就是用来区分当前记录时student或是teacher一个标记,它会在新中生成一个字段,而该字段名称类型都在此处进行指定。...下面我们通过插入数据来看看具体生成结构: 很明显,我们person只起到一个模板效果并没有什么实际价值,而我们studentsteachersid,name字段都是从person继承得到...joined-subclass来配置继承子类,在Hibernate生成数据时候会将studentteacher主键作为外键关联父主键。

80980
  • SqlAlchemy 2.0 中文文档(九)

    尽管多态鉴别器表达式不是严格必需,但如果需要多态加载,则需要它。在基础上建立是实现这一点最简单方法,然而非常复杂继承映射可能会使用 SQL 表达式,例如 CASE 表达式,作为多态鉴别器。...强烈建议如果需要关系加载多态加载灵活性,尽量使用连接或继承。如果不需要多态加载,则每个完全引用自己时可以使用普通继承映射。...虽然多态鉴别器表达式不是严格必需,但如果需要多态加载,则需要。在基上建立一个是实现此目的最简单方法,但是非常复杂继承映射可能会使用 SQL 表达式,例如 CASE 表达式,作为多态鉴别器。...无论继承映射使用不同联接作为子类(如联合继承)还是所有一个作为继承,这个值都应该被持久化并在查询时对 ORM 可用。...强烈建议如果需要灵活性关系加载多态加载,尽可能使用连接或继承。如果不需要多态加载,则可以使用普通继承映射,如果每个都完全引用其自己表格。

    21410

    加速你Hibernate引擎(上) 转

    主要缺点整个层次中所有属性都挤在一张大表里,如果有很多子类特有的属性,数据库中就会有太多字段取值为null,这为当前基于行数据库(使用基于DBMS数据仓库处理这个会更好些)SQL调优增加了难度...; 优点包括数据比较紧凑(没有不需要可空字段),数据跨三个子类进行分区,容易使用与其他进行关联。...缺点是在所有策略中它使用连接最多,SQL语句稍显复杂(看看Hibernate动态鉴别器长CASE子句)。相比单张,数据库要花更多时间调优数据连接,数据仓库在使用该策略时通常不太理想。...因为不能跨子类字段来建立复合索引,如果需要按这些进行查询,性能会受影响。任何子类数据修改都涉及两张子类。...“每个具体一张”对有高并发、复杂查询并且没有共享OLTP系统来说是个不错选择。当然你不得不牺牲与其他之间关联。

    61030

    Hibernate映射继承关系

    Hibernate中,继承关系映射可以使用三种方式,分别是继承、多表继承一对一继承。...Hibernate实体是指对应于数据库中一张Java继承关系映射将子类属性映射到同一张中或者分别映射到不同中。...在Hibernate中,继承关系映射方式主要有三种,分别是继承、多表继承一对一继承继承继承中,继承关系子类使用同一个。...二、继承映射示例在本文中,我们将从继承开始,展示如何使用Hibernate实现继承关系映射。下面是两个Java,我们将使用这两个来演示继承映射。...在中定义了一个主键id字段一个name字段,因为我们使用继承,这些字段在数据库中都会共用同一张

    51430

    Hibernate Spring Java Persistence API EJB3 相关术语及关键字

    Reference 3.2翻译时采用术语 O/R Mapping 对象/关系数据库映射 identifier property: 标识属性 discriminator: 辨别标志(不使用"鉴别器...不翻译 catalog 目录 tables column /字段 index 索引 sequence 序列 对应于数据库中sequence unique 唯一 nullable 可为空...property 属性 attribute 属性 Inheritance 继承 unqualified class name 短名 不附带包名 full qualified class name...logical mapping 逻辑映射 physical mapping 物理映射 identity 标识(符) 能唯一标识一个对象字段/,对应到数据库一般为主键 Identifier 标识符...per Class 每个一张 Single Table per Class Hierarchy 每个层次结构一张 Joined Subclass 连接子类 inheritance hierarchy

    89030

    hibernate笔记(三)

    -- id 节点指定是主键映射, 即user_id是主键 主键生成方式: foreign 即把别的主键作为当前主键; property (关键字不能修改)指定引用对象 对象全名...注意:组件被包含组件,共同映射到一张!...继承映射 需求:猫、猴子、动物。 所有子类映射到一张 (1张) 什么情况用? 子类教多,且子类较为简单,即只有个别属性! 好处:因为使用一个映射文件, 减少了映射文件个数。...-- 继承映射, 每个对应一张(父也对应) --> <class name="Animal...总结: 所有的子类都写到一个映射文件; 父<em>类</em>不对应<em>表</em>; 每个子类对应一张<em>表</em> <em>Hibernate</em>中映射: 多对一 一对多 多对多 一对一 (多对一<em>的</em>特殊应用) 组件 <em>继承</em>

    60540

    Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8

    :每次加载 hibernate 时都会删除上一次生成,然后根据你 model 再重新来生成新,哪怕两次没有任何改变也要这样执行,这就是导致数据库数据丢失一个重要原因。...删除-创建-操作-再删除 update:最常用属性,第一次加载 hibernate 时根据 model 会自动建立起结构(前提是先建立好数据库),以后加载 hibernate 时根据 model...自动更新结构,即使结构改变了,但行仍然存在,不会删除以前行。...没-创建-操作 | 有-更新没有的属性-操作 validate:每次加载 hibernate 时,验证创建数据库结构,只会和数据库中进行比较,不会创建新,但是会插入新值。...("stone"); // 查询条 Repository.findAll(pageable); // 带排序分页查询列表 Repository.saveState(1, 0); // 更新单个字段

    3.8K20

    Spring Boot 最佳实践(五)Spring Data JPA 操作 MySQL 8

    :每次加载 hibernate 时都会删除上一次生成,然后根据你 model 再重新来生成新,哪怕两次没有任何改变也要这样执行,这就是导致数据库数据丢失一个重要原因。...[删除-创建-操作-再删除] update:最常用属性,第一次加载 hibernate 时根据 model 会自动建立起结构(前提是先建立好数据库),以后加载 hibernate 时根据 model...自动更新结构,即使结构改变了,但行仍然存在,不会删除以前行。...[没-创建-操作 | 有-更新没有的属性-操作] validate:每次加载 hibernate 时,验证创建数据库结构,只会和数据库中进行比较,不会创建新,但是会插入新值。...("stone"); // 查询条 Repository.findAll(pageable); // 带排序分页查询列表 Repository.saveState(1, 0); // 更新单个字段

    3.5K40

    One-Shot Image-to-Image Translation viaPart-Global Learning With aMulti-Adversarial Framework

    受这一过程启发,在这项工作中,我们设计了一种基于零件鉴别器程序,该程序能够使用来自目标域有限信息来区分从翻译图像真实图像中随机裁剪局部零件。...为了缓解这个问题,我们开发了一种平衡对抗性损失,以减缓向次拍摄图像收敛。在这里,我们设计了一种策略,通过使用参数α来控制两个域鉴别器收敛速度,这可以同时提高源鉴别器目标鉴别器。...对于一对多情况,我们只使用来自目标域一个图像来自源域许多图像。对于多对多情况,我们使用来自这两个域许多图像。...12(b)VI。如果我们不使用全局鉴别剂,很容易发现翻译图像在没有全局约束情况下具有非常差全局一致性。当我们只使用全局鉴别器时,生成图像看起来与所有生成图像中相同区域中相同伪影相似。...当使用部分鉴别器时,可以提高性能,这得益于这样一个事实,即部分鉴别者可以通过强制生成器关注更细粒度语义细节来帮助缓解过度拟合。 此外,我们还研究了零件鉴别器零件尺寸参数α影响。

    27620

    Hibernate框架学习之注解映射实体

    length:指定该属性映射到数据所能保存数据最大长度,默认是255 默认情况下,我们不使用@Column修饰属性时候,hibernate会自动以该属性名称映射到数据。...**我们也可以使用注解@Transient修饰属性**,它指明了该属性不会被映射到数据中某一,而只是作为一个属性被定义在实体中。...联合主键映射可以通过多个@Id进行修饰即可,但要求该实体必须继承 java.io.Serializable并尽可能重写Object两个方法,hashCodeequals,因为多个属性唯一确定一条记录...总的来说,一旦hibernate发现实体中有集合类型属性需要映射,那么就会为集合属性单独映射出一张,该至少有两个字段,一个字段依赖于主表id字段值,在新中相同该字段记录共同组合成为实体集合属性值...看看表生成情况: ? 对于像set一样无序集合,新主键有user_idvalue联合作为主键,可以保证唯一确定一条数据记录。

    3.1K90

    JPA 详解

    对象关系信息:应用开发者必须提供数据库数据Java对象之间对应关系 JPQL: JPA目的是抽象具体数据库,框架仍然提供了SQL方式处理特殊方法 项目实战 首先创建项目: mvn archetype...注解@Column 是用来映射Java对象,及时不加注解,JPA仍然会映射,除非其使用注解@Transient修饰,则不会被映射。...可以在JPA整个项目混用注解字段或者方法,但是在一个实体和它子类中需要确保使用是同一种注解方式。...,可以使用@Inheritance选择不同存储策略,对于这种一共有三种选择: SINGLE_TABLE: 这个策略就是把所有的字段映射到一张中 JOINERD: 对每个实体创建一张。...表示使用Phone中person字段来关联。

    4.8K20

    SqlAlchemy 2.0 中文文档(十)

    就一个可以在不同情境下被完全持久化到不同用例而言,早期版本 SQLAlchemy 提供了一个来自 Hibernate 功能,称为“实体名称”功能。...另请参阅 使用 raiseload 避免延迟加载 use_existing_column – 如果为 True,则尝试在继承(通常是单一继承)上定位给定列名,如果存在,则不会生成新...如果此映射器使用继承从另一个映射器继承,则可以为 None。在使用声明式时,此参数由扩展自动传递,根据通过 DeclarativeBase....polymorphic_load – 在继承层次结构中子类中指定“多态加载”行为(仅适用于连接继承)。...在继承映射器情况下,一些可能由映射器管理。例如,在Join情况下,主键由Join引用所有主键列确定。

    16710

    mybatis-plus思维导图,让mybatis-plus不再难懂

    MyBatis 可以使用简单 XML 或注解来配置映射原生信息,将接口 Java POJOs(Plain Old Java Objects,普通 Java对象)映射成数据库中记录。...虽然说增删改查操作可以通过mybatis generator工具来生成(或者自己写模板工具生成),但项目开发过程中总免不了要新添加新字段,这些工具就帮不了我了,我得把新字段写到原来所有增删改查...每当这时候,我怀念Hibernate了。嘿嘿,Hibernate字段就贼简单,操作也是贼方便。但我依然不喜欢用Hibernate,哈哈。...它提供了hibernateCRUD操作方便同时,又保留了mybatis特性。...简化 CRUD 前面已经说了mp已经简化了mybatis基本操作,先来看看。

    3.9K180

    Hibernate HQL注入攻击入门

    但是,我在网络上找不到针对Hibernate查询语言相关资源。因此本文总结了笔者在阅读文档不断试验过程中一些经验技巧。...什么是Hibernate Hibernate是一种ORM框架,用来映射与tables相关定义(代码),并包含一些高级特性,包括缓存以及继承,通常在Java与.NET中使用(可参考NHibernate...因为有两种错误消息来源,一种来自hibernate引擎,一种来自数据库。 HQL一大挑战是注射模式非常有限,其没有联合,没有函数来创建简单延迟,没有系统函数,没有可用元数据等。...也许有读者可能会问,如果没有元数据,怎么样才能发现隐藏/字段呢。...访问不同 如前所述,HQL支持UNION查询,可以与其它join,但只有在模型明确定义了关系后才可使用。我发现访问其它唯一方法是使用子查询。

    4.2K80

    day29_Hibernate学习笔记_01

    提供一个标识属性,映射数据主键字段。 所有属性提供public访问控制符setget方法(JavaBean)。...6.3、区分自然主键代理主键 主键需要具备: 不为空/不能重复/不能改变 自然主键:在业务中,某个属性符合主键三个要求,那么该属性可以作为主键。...代理主键:在业务中,不存符合以上3个条件属性,那么就增加一个没有意义作为主键。 6.4、基本数据与包装类型 基本数据类型包装类型对应hibernate映射类型相同。...-- 配置 PO   之间对应关系 -->     <!...默认情况:hibernate生成insert或update语句,使用配置文件所有项             type        类型。

    1.1K20

    什么是JPA?Java Persistence API简介

    Hibernate ORM或EclipseLink这样框架将该任务编码为库或框架,即ORM层。作为应用程序体系结构一部分,ORM层负责管理软件对象转换,以便与关系数据库中进行交互。...在Java中,ORM层转换Java对象,以便可以在关系数据库中存储管理它们。 默认情况下,持久化对象名称将成为名称,字段将成为。设置后,每个行对应于应用程序中对象。...该georgeHarrison对象可以来自任何地方(前端提交,外部服务等),并设置其IDname字段。然后,对象上字段用于提供SQL insert语句值。...作为一个示例,名为Musician将默认映射到名为Musician数据库。 传统配置是节省时间,并且在许多情况下它运行良好。也可以自定义JPA配置。...在清单6中,我们告诉JPA要使用哪个字段作为Musician主键。

    10.2K30

    mybatis 一些常用功能

    鉴别器元素就是被设计来处理这个情况,还有包括继承层次结构。鉴别器非常容易理 解,因为它表现很像 Java 语言中 switch 语句。    ...定义鉴别器指定了 column javaType 属性。是 MyBatis 查找比较值地方。 JavaType 是需要被用来保证等价测试合适类型(尽管字符串在很多情形下都会有用)。...1,则会使用carResult,即只加载doorCount属性,如果需要加载vehicleResult中属性,则需要让carResult继承vehicleResult,使用如下: <resultMap...缓存:     同hibernate一样,一级缓存(session级)是默认开启,如果需要开启二级缓存,就需要加以下配置: <!...映射语句文件中所有 insert, update delete 语句会刷新缓存。     缓存会使用 Least Recently Used( LRU,最近最少使用)算法来收回。

    57180
    领券