Búsqueda de sitios web

¿Cuáles son las diversas estrategias de mapeo de herencia disponibles en Hibernate?


Hay tres tipos de estrategias de mapeo de herencia:

  • Tabla por jerarquía de clases

  • Tabla por clase de hormigón

  • Tabla por subclase

    En este artículo, analizaremos la jerarquía de tablas por clases.

Tabla por jerarquía de clases

  • En esto, solo se crea una tabla para el mapeo de herencia. La desventaja de este enfoque es que se almacenan muchos valores nulos en la tabla.

  • @Inheritance(strategy=InheritanceType.SINGLE_TABLE), @DiscriminatorColumn y @DiscriminatorValue son las anotaciones utilizadas en esta estrategia.

  • @DiscriminatorColumn se usa para crear una columna adicional que se usa para identificar las clases de jerarquía.

Considere el siguiente ejemplo para entender esto:

Pasos para implementar:

  • Cree clases de entidad y utilice anotaciones adecuadas para ellas.

  • Escriba el archivo de configuración de hibernación y agregue las clases de mapeo.

  • Escriba el código para crear y almacenar los datos en la tabla.

1.CREAR CLASES DE ENTIDAD

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

Deportes_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. Archivo de configuración de hibernación (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. Código para crear una tabla y almacenar los datos.

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(); } }

Tabla MySQL