Joined
The joined strategy creates a table for the root class of an inheritance structure, and a separate table for each inheriting class in the structure. The data of the root class table is not copied in the inheriting class tables.This is a root class example:
@Entity
@AutoProperty
@Inheritance(strategy=InheritanceType.JOINED)
public class Joined implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String s;
// Setter, Getters, Constructors, Pojomatic...
}
Single Table
The single table strategy creates a unique table for a given inheritance structure where all classes in the hierarchy are saved. This table contains a discriminating column which will help differentiate between the different classes. Each class must define a discriminating value with @DiscriminatorValue.For the root class:
@Entity
@AutoProperty
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(
name="discr", discriminatorType=DiscriminatorType.INTEGER)
@DiscriminatorValue("44")
public class SingleTable implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private long id;
private String s;
// Setter, Getters, Constructors, Pojomatic...
}
@Entity
@AutoProperty
@DiscriminatorValue("45")
public class InheritsSingleTable extends SingleTable {
...
}
Table Per Class
The table per class strategy create a separate table per class.Root class example:
@Entity
@AutoProperty
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS)
public class TablePerClass implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private long id;
private String s;
// Setter, Getters, Constructors, Pojomatic...
}
Check
The following:JPA.INSTANCE.clear();
InheritsJoined ij = new InheritsJoined();
ij.setS("IJ1");
ij.setS2("IJ2");
JPA.INSTANCE.save(ij);
InheritsSingleTable st
= new InheritsSingleTable();
st.setS("ST1");
st.setS2("ST2");
JPA.INSTANCE.save(st);
InheritsTablePerClass tpc
= new InheritsTablePerClass();
tpc.setS("TPC1");
tpc.setS2("TPC2");
JPA.INSTANCE.save(tpc);
JPA.INSTANCE.clear();
InheritsJoined retr_ij = JPA.INSTANCE.get(
InheritsJoined.class, ij.getId());
System.out.println("Source == Retrieved: " + (ij==retr_ij));
System.out.println(retr_ij);
InheritsSingleTable retr_st = JPA.INSTANCE.get(
InheritsSingleTable.class, st.getId());
System.out.println("Source == Retrieved: " + (st==retr_st));
System.out.println(retr_st);
InheritsTablePerClass retr_tpc = JPA.INSTANCE.get(
InheritsTablePerClass.class, tpc.getId());
System.out.println("Source == Retrieved: " + (tpc==retr_tpc));
System.out.println(retr_tpc);
Source == Retrieved: false
InheritsJoined{id: {1}, s: {IJ1}, s2: {IJ2}}
Source == Retrieved: false
InheritsSingleTable{id: {1}, s: {ST1}, s2: {ST2}}
Source == Retrieved: false
InheritsTablePerClass{id: {1}, s: {TPC1}, s2: {TPC2}}
No comments:
Post a Comment