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

Apakah strategi pemetaan warisan yang berbeza dalam Hibernate?

PHPz
Lepaskan: 2023-09-12 22:41:21
ke hadapan
944 orang telah melayarinya

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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
}
Salin selepas log masuk

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>
Salin selepas log masuk

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();
   }
}
Salin selepas log masuk

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!

Label berkaitan:
sumber:tutorialspoint.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan