Heim >Java >javaLernprogramm >Welche unterschiedlichen Vererbungszuordnungsstrategien gibt es in Hibernate?
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.
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 -
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.
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 }
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 }
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 }
<!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>
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(); } }
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!