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

Welche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?

PHPz
Freigeben: 2023-09-12 22:41:21
nach vorne
940 Leute haben es durchsucht

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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();
   }
}
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage