Image Showing Values in Table with and Without DiscriminatorColumn defined

- By Default Hibernate follows Single Table Inheritance
- DiscriminatorColumn tells hibernate the name in which DiscriminatorColumn should be save or else it would be saved as DType
@Inheritance(strategy=InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name="VEHICLE_TYPE", discriminatorType=DiscriminatorType.STRING)
Vehicles.java
@Entity
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="VEHICLE_TYPE",
discriminatorType=DiscriminatorType.STRING)
public class Vehicles {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int VehicleId;
private String name;
public int getVehicleId() {
return VehicleId;
}
public void setVehicleId(int vehicleId) {
VehicleId = vehicleId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
TwoWheelers.java
@Entity
@DiscriminatorValue("Bike")
public class TwoWheelers extends Vehicles{
private String steeringHolder;
public String getSteeringHolder() {
return steeringHolder;
}
public void setSteeringHolder(String steeringHolder) {
this.steeringHolder = steeringHolder;
}
}
FourWheelers.java
@Entity
@DiscriminatorValue("Car")
public class FourWheelers extends Vehicles{
private String steeringWheel;
public String getSteeringWheel() {
return steeringWheel;
}
public void setSteeringWheel(String steeringWheel) {
this.steeringWheel = steeringWheel;
}
}
By Using the below annotation individual tables would be created for all the subclasses instead of placing all the values getting placed in a single class.
InheritanceType.TABLE_PER_CLASS
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)

InheritanceType.JOINED
@Inheritance(strategy=InheritanceType.JOINED)

Using InheritanceType.JOINED gets more normalized table compared to InheritanceType.TABLE_PER_CLASS