Hibernate: Single Table inheritance with annotation

April 26th, 2010 by jeremychone
//// Principal.java
import javax.persistence.DiscriminatorColumn;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.Inheritance;
import javax.persistence.Table;
import javax.persistence.InheritanceType;
import javax.persistence.DiscriminatorType;

import org.hibernate.annotations.ForceDiscriminator;
@Entity
@Table(name ="principal")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "ctype", discriminatorType = DiscriminatorType.CHAR)
@DiscriminatorValue("p")
@ForceDiscriminator   //optional, useful in some occasions
public class Principal{
 ...
}

//// User.java
@Entity
@DiscriminatorValue("u")
@ForceDiscriminator //optional, useful in some occasions
public class User extends Principal {
  ...
}

//// Group.java
@Entity
@DiscriminatorValue("g")
@ForceDiscriminator //optional, useful in some occasions
public class Group extends Principal {
  ...
}

Leave a Reply