1、多个entity对应同一张表,用一个字段区分
@Entity
@Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "GRP_UNITINFO")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "GROUPFLG", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorOptions(force=true)
@DiscriminatorValue(value = "2")
public class Unitinfo extends BaseActiveEntity implements java.io.Serializable {
@Entity
@Table(name = "GRP_UNITINFO")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "GROUPFLG", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorOptions(force=true)
@DiscriminatorValue(value = "1")
public class Subgroup extends BaseActiveEntity implements java.io.Serializable{
@Entity
@Cache(usage=CacheConcurrencyStrategy.READ_WRITE)
@Table(name = "GRP_UNITINFO")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "GROUPFLG", discriminatorType = DiscriminatorType.STRING)
@DiscriminatorOptions(force=true)
@DiscriminatorValue(value = "0")
@DiscriminatorOptions(force=true)可以用@ForceDiscriminator(org.hibernate.annotations.<em>ForceDiscriminator</em>)代替
@DiscriminatorColumn和@DiscriminatorOptions(force=true)在使用时,大部分情况下应该一起使用才不会出问题,但为什么Hibernate却必须在使用时要指定@DiscriminatorOptions,而且@DiscriminatorOptions中force的默认值还是false呢?
当使用Discriminator应用于单表时,才需要使用@DiscriminatorOptions(force=true),应用于JOIN_TABLE时,不需要此注解
原文详见:http://stackoverflow.com/questions/12199874/about-the-use-of-forcediscriminator-discriminatoroptionsforce-true
首先看一下最顶层的父类EmployeeEO,代码如下所示。
EmployeeEO
@Entity
@Table(name = "tb_employee")
/**继承映射策略*/
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
/**标识字段定义*/
@DiscriminatorColumn(
name="employe