Rumah  >  Artikel  >  Java  >  Apakah strategi pemetaan warisan yang berbeza dalam Hibernate?

Apakah strategi pemetaan warisan yang berbeza dalam Hibernate?

PHPz
PHPzke hadapan
2023-09-12 22:41:21912semak imbas

Strategi pemetaan warisan terbahagi kepada tiga jenis -

  • Jadual untuk setiap hierarki kelas

  • Meja untuk setiap kelas konkrit

  • Jadual untuk setiap subkelas

    Dalam artikel ini, kita akan membincangkan hierarki jadual untuk setiap kelas.

Jadual untuk setiap hierarki kelas

  • Di sini, buat hanya satu jadual untuk pemetaan warisan. Kelemahan pendekatan ini ialah sejumlah besar nilai nol disimpan dalam jadual.

  • @Inheritance(strategy=InheritanceType.SINGLE_TABLE), @DiscriminatorColumn dan @DiscriminatorValue ialah anotasi yang digunakan dalam strategi ini.

  • @DiscriminatorColumn digunakan untuk membuat lajur tambahan yang mengenal pasti kelas hierarki.

Pertimbangkan contoh berikut untuk memahami perkara ini -

Apakah strategi pemetaan warisan yang berbeza dalam Hibernate?

Langkah pelaksanaan -

  • Buat kelas entiti dan gunakan anotasi yang sesuai untuk mereka.

  • Tulis fail konfigurasi hibernate dan tambah kelas pemetaan.

  • Tulis kod untuk mencipta data dan menyimpannya dalam jadual.

1. Buat kelas entiti

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
}

Kereta_Sukan.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
}

Teksi_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. Fail konfigurasi hibernate (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>

3. Kod untuk membuat jadual dan menyimpan 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();
   }
}

Jadual MySQL

Apakah strategi pemetaan warisan yang berbeza dalam Hibernate?

Atas ialah kandungan terperinci Apakah strategi pemetaan warisan yang berbeza dalam Hibernate?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam