Heim  >  Artikel  >  Java  >  Welche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?

Welche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?

PHPz
PHPznach vorne
2023-09-12 22:41:21912Durchsuche

Vererbungszuordnungsstrategien werden in drei Typen unterteilt:

  • Tabelle für jede Klassenhierarchie

  • Tabelle für jede konkrete Klasse

  • Tabellen für jede Unterklasse

    In diesem Artikel besprechen wir die Tabellenhierarchie für jede Klasse.

Tabelle für jede Klassenhierarchie

  • Hier erstellen Sie nur eine Tabelle für die Vererbungszuordnung. Der Nachteil dieses Ansatzes besteht darin, dass eine große Anzahl von Nullwerten in der Tabelle gespeichert wird.

  • @Inheritance(strategy=InheritanceType.SINGLE_TABLE), @DiscriminatorColumn und @DiscriminatorValue sind die in dieser Strategie verwendeten Anmerkungen.

  • @DiscriminatorColumn wird verwendet, um eine zusätzliche Spalte zu erstellen, die die Hierarchieklasse identifiziert.

Betrachten Sie das folgende Beispiel, um dies zu verstehen -

Welche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?

Implementierungsschritte -

  • Erstellen Sie Entitätsklassen und verwenden Sie entsprechende Annotationen dafür.

  • Schreiben Sie eine Konfigurationsdatei für den Ruhezustand und fügen Sie eine Zuordnungsklasse hinzu.

  • Schreiben Sie Code, um Daten zu erstellen und in Tabellen zu speichern.

1. Entitätsklasse erstellen

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
}

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. Hibernate-Konfigurationsdatei (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. Code zum Erstellen einer Tabelle und zum Speichern von Daten

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-Tabelle

Welche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?

Das obige ist der detaillierte Inhalt vonWelche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen