Home > Java > javaTutorial > What are the different inheritance mapping strategies in Hibernate?

What are the different inheritance mapping strategies in Hibernate?

PHPz
Release: 2023-09-12 22:41:21
forward
944 people have browsed it

Inheritance mapping strategies are divided into three types -

  • Table for each class hierarchy

  • Table of each concrete class

  • Tables for each subclass

    In this article, we will discuss the table hierarchy for each class.

Table for each class hierarchy

  • Here, only one table is created for inheritance mapping. The disadvantage of this approach is that a large number of null values ​​are stored in the table.

  • @Inheritance(strategy=InheritanceType.SINGLE_TABLE), @DiscriminatorColumn and @DiscriminatorValue are the annotations used in this strategy.

  • @DiscriminatorColumn is used to create an additional column that identifies the hierarchy class.

Consider the following example to understand this -

What are the different inheritance mapping strategies in Hibernate?

Implementation steps -

  • Create entity classes and use appropriate annotations for them.

  • Write hibernate configuration file and add mapping class.

  • Write code to create data and store it in a table.

1. Create entity class

Car.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
}
Copy after login

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
}
Copy after login

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
}
Copy after login

2. Hibernate configuration file (hibernate.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>
Copy after login

3. Code to create table and store data

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();
   }
}
Copy after login

MySQL table

What are the different inheritance mapping strategies in Hibernate?

The above is the detailed content of What are the different inheritance mapping strategies in Hibernate?. For more information, please follow other related articles on the PHP Chinese website!

source:tutorialspoint.com
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template