Hibernate 中有哪些可用的继承映射策略?

有三种类型的继承映射策略 -

  • 每个类层次结构的表

  • 每个混凝土等级的桌子

  • 每个子类的表

    在本文中,我们将讨论每个类层次结构的表。

每个类层次结构的表

  • 在此中,仅为继承映射创建一个表。此方法的缺点是表中存储了许多空值。

  • @Inheritance(策略=InheritanceType.SINGLE_TABLE)、@DiscriminatorColumn和@DiscriminatorValue是此策略中使用的注释。

  • @DiscriminatorColumn用于创建用于标识层次结构类的附加列。

考虑以下示例来理解这一点 -

实施步骤 -

  • 创建实体类并为其使用适当的批注。

  • 编写休眠配置文件并添加映射类。

  • 编写代码以在表中创建和存储数据。

1.创建实体类

车.java



package com .tutorialspoint ; @Entity @Table (name = "car" ) @Inheritance (strategy = InheritanceType .SINGLE_TABLE ) @DiscriminatorColumn (name = "category" ,discriminatorType = DiscriminatorType .STRING ) @DiscriminatorValue (value = "car" ) public class Car { @Id @GeneratedValue (strategy = GenerationType .AUTO ) private int id ; @Column (name = "name" ) private String name ; @Column (name = "color" ) private String color ; //Getters //Setters }

Sports_Car.java



package com .tutorialspoint ; import javax .persistence . * ; @Entity @DiscriminatorValue ( "sportscar" ) public class Sports_Car extends Car { @Column (name = "mileage" ) private int mileage ; @Column (name = "cost" ) private int cost ; //Getters //Setters }

Taxi_Car.java



package com .tutorialspoint ; import javax .persistence . * ; @Entity @DiscriminatorValue ( "taxicar" ) public class Taxi_Car extends Car { @Column (name = "farePerKm" ) private int farePerKm ; @Column (name = "available" ) private boolean available ; //Getters //Setters }

2. 休眠配置文件(休眠.cfg.xml)



<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- JDBC Database connection settings --> <property name="connection.driver_class">com.mysql.cj.jdbc.Driver </property> <property name="connection.url">jdbc:mysql://localhost:3306/demo?useSSL=false </property> <property name="connection.username">root </property> <property name="connection.password">root </property> <!-- JDBC connection pool settings ... using built-in test pool --> <property name="connection.pool_size">4 </property> <!-- Echo the SQL to stdout --> <property name="show_sql">true </property> <!-- Select our SQL dialect --> <property name="dialect">org.hibernate.dialect.MySQL5Dialect </property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">create-drop </property> <!-- name of annotated entity class --> <mapping class="com.tutorialspoint.Car"/> <mapping class="com.tutorialspoint.Sports_Car"/> <mapping class="com.tutorialspoint.Taxi_Car"/> </session-factory> </hibernate-configuration>

3. 创建表和存储数据的代码



package com .tutorialspoint ; import org .hibernate . Session ; import org .hibernate . SessionFactory ; import org .hibernate . Transaction ; import org .hibernate .cfg . Configuration ; public class StoreTest { public static void main ( String args [ ] ) { SessionFactory sessionFactory = new Configuration ( ) . configure ( "com/tutorialspoint/hibernate.cfg.xml" ) . buildSessionFactory ( ) ; Session session =sessionFactory . openSession ( ) ; Transaction t =session . beginTransaction ( ) ; Car c1 = new Car ( ) ; c1 . setName ( "Mercedes" ) ; c1 . setColor ( "Black" ) ; Sport_Car c2 = new Sport_Car ( ) ; c2 . setName ( "Porsche" ) ; c2 . setColor ( "Red" ) ; c2 . setMileage ( 20 ) ; c2 . setCost ( 5000000 ) ; Taxi_Car c3 = new Taxi_Car ( ) ; c3 . setName ( "Innova" ) ; c3 . setColor ( "White" ) ; c3 . setFarePerKm ( 7 ) ; c3 . setAvailable ( true ) ; session . persist (c1 ) ; session . persist (c2 ) ; session . persist (c3 ) ; t . commit ( ) ; session . close ( ) ; } }

MySQL 表

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值