栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

按类型表映射子类(多对一hibernate)

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

按类型表映射子类(多对一hibernate)

是的,几乎没有办法映射这种情况。JPA支持三种不同的数据表示形式:

  • 单表 策略
  • 联合 策略
  • 逐表 策略

换句话说,根据所使用的继承类型,您将获得不同的数据库模型。各种JPA提供程序可能支持其他继承策略。

考虑以下示例:

@Entity@Inheritance //by default SINGLE_TABLE strategy@DiscriminatorColumn( //not supported for TABLE_PER_CLASS strategy    name = "BUS_TYPE",     discriminatorType = DiscriminatorType.INTEGER)public abstract class Bus {    @Id    protected int id;    protected int seats;    public Bus() {    }}@Entity@DiscriminatorValue(value = "1") //not supported for TABLE_PER_CLASS strategypublic class BusSubClass1 extends Bus {    private String specific1;    public BusSubClass1() {    }}@Entity@DiscriminatorValue(value = "2") //not supported for TABLE_PER_CLASS strategypublic class BusSubClass2 extends Bus {    @Temporal    private Data specific2;    public BusSubClass2() {    }}

使用

InheritanceType.SINGLE_TABLE
策略将导致一个包含所有具体实体类型的数据库表:

 Bus ID BUS_TYPE SEATS SPECIFIC1 SPECIFIC2 -- -------- ----- --------- --------- 1  1        50    qwerty 2  1        55    asdfgh 3  2        30   2014-01-01
  • 继承层次结构中的每个具体实体实例都通过区分符值进行区分(此处由BUS_TYPE列指示)
  • 所有数据库列都必须声明为 空, 因为并非所有数据库列都可能包含值(因此,对于无法设置为null的列可能会出现问题)
  • 宽或深的层次结构可能会影响性能(表中分别有很多冗余的列或行)
  • 缺乏规范化会浪费数据库表中的空间
  • 为读取和写入操作提供良好的性能(多态查询不需要连接,仅需要鉴别符值)
  • 添加/删除实体字段可能有问题(从数据库管理的角度来看)

使用

InheritanceType.JOINED
策略会导致每个实体类型具有多个数据库表(来自的所有共享字段
Bus
都存储在相应的表中):

 Bus  BusSubClass1          BusSubClass2 ID BUS_TYPE SEATS          ID SPECIFIC1          ID SPECIFIC2 -- -------- -----          -- ---------          -- --------- 1  1        50  1  qwerty  3  2014-01-01 2  1        55  2  asdfgh 3  2        30
  • 继承层次结构中的每个具体实体类都通过鉴别符值进行区分(此处由BUS_TYPE列指示)
  • 标准化可改善数据存储(与SINGLE_TABLE策略相比,减少了未使用的空间)
  • 非多态查询(针对单个具体实体)需要联接
  • 多态查询(用于实体类的广泛或深入层次结构)需要多个联接,并且可能很昂贵
  • 添加/删除实体字段非常简单(从数据库管理的角度来看)

使用

InheritanceType.TABLE_PER_CLASS
策略可以为每种实体类型精确地提供一个数据库表(所有共享字段
Bus
都在具体的子类中重新定义):

 BusSubClass1     BusSubClass2 ID SEATS SPECIFIC1          ID SEATS SPECIFIC2 -- ----- ---------          -- ----- --------- 1  50    qwerty  3  30    2014-01-01 2  55    asdfgh
  • 继承层次结构中的每个具体实体类仅通过共享标识符来区分(不使用鉴别​​符)
  • 规范化改善了数据存储(与SINGLE_TABLE策略相比,未使用的空间更少,但比JOINED策略的情况要多)
  • 非多态查询(对于单个具体实体)非常有效,因为不需要连接
  • 多态查询(用于实体类的广泛或深入层次结构)需要多个联接,并且可能很昂贵
  • 添加/删除实体字段非常简单(从数据库管理的角度来看)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/390885.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号