What and when is the best scenario to use DiscriminatorValue annotation in hibernate?
These 2 links help me understand the inheritance concept the most:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html
http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6
To understand discriminator, first you must understand the inheritance strategies: SINGLE_TABLE, JOINED, TABLE_PER_CLASS.
Discriminator is commonly used in SINGLE_TABLE inheritance because you need a column to identify the type of the record.
Example: You have a class Student and 2 sub-classes: GoodStudent and BadStudent. Both Good and BadStudent data will be stored in 1 table, but of course we need to know the type and that's when (DiscriminatorColumn and) DiscriminatorValue will come in.
Annotate Student class
@Entity
@Table(name ="Student")
@Inheritance(strategy=SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING,
name = "Student_Type")
public class Student{
private int id;
private String name;
}
Bad Student class
@Entity
@DiscriminatorValue("Bad Student")
public class BadStudent extends Student{
//code here
}
Good Student class
@Entity
@DiscriminatorValue("Good Student")
public class GoodStudent extends Student{
//code here
}
So now the Student table will have a column named Student_Type and will save the DiscriminatorValue of the Student inside it.
-----------------------
id|Student_Type || Name |
--|---------------------|
1 |Good Student || Ravi |
2 |Bad Student || Sham |
-----------------------
See the links I posted above.