In this post we will see the next strategy that hibernate uses while creating tables. In the strategy attribute
of the @Inheritance annotation, if we use "TABLE_PER_CLASS", then hibernate creates a separate table for each
entity. The below program explains how to achieve this.
<?xml version='1.0' encoding='utf-8'?>
<!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>
<!-- Database connection settings -->
<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="connection.username">hr</property>
<property name="connection.password">hr</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.OracleDialect</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>
<!-- Names the annotated entity class -->
<mapping class="com.ram.dao.Vehicle"/>
<mapping class="com.ram.dao.TwoWheeler"/>
<mapping class="com.ram.dao.FourWheeler"/>
</session-factory>
</hibernate-configuration>
File: com.ram.dao.Vehicle.java
package com.ram.dao;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
@Entity
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class Vehicle {
@Id @GeneratedValue
private int vehicleId;
private String vehicleName;
public int getVehicleId() {
return vehicleId;
}
public void setVehicleId(int vehicleId) {
this.vehicleId = vehicleId;
}
public String getVehicleName() {
return vehicleName;
}
public void setVehicleName(String vehicleName) {
this.vehicleName = vehicleName;
}
}
File: com.ram.dao.TwoWheeler.java
package com.ram.dao;
import javax.persistence.Entity;
@Entity
public class TwoWheeler extends Vehicle {
private String steeringHandle;
public String getSteeringHandle() {
return steeringHandle;
}
public void setSteeringHandle(String steeringHandle) {
this.steeringHandle = steeringHandle;
}
}
File: com.ram.dao.FourWheeler.java
package com.ram.dao;
import javax.persistence.Entity;
@Entity
public class FourWheeler extends Vehicle {
private String steeringWheel;
public String getSteeringWheel() {
return steeringWheel;
}
public void setSteeringWheel(String steeringWheel) {
this.steeringWheel = steeringWheel;
}
}
File: com.ram.hibernate.TablePerClassExample.java
package com.ram.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import com.ram.dao.FourWheeler;
import com.ram.dao.TwoWheeler;
import com.ram.dao.Vehicle;
public class TablePerClassExample {
public static void main(String[] args) {
Vehicle vehicle = new Vehicle();
vehicle.setVehicleName("Car");
TwoWheeler yamaha = new TwoWheeler();
yamaha.setVehicleName("Yamaha");
yamaha.setSteeringHandle("Yamaha steering handle");
FourWheeler benz = new FourWheeler();
benz.setVehicleName("Benz");
benz.setSteeringWheel("Benz steering wheel");
SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
Session session = sessionFactory.openSession();
session.beginTransaction();
session.save(vehicle);
session.save(yamaha);
session.save(benz);
session.getTransaction().commit();
session.close();
}
}
No comments:
Post a Comment