hibernate 父子类关系 注解配置:
父类:
@Entity
@Table(name = "COMP_PAGE_CONFIG_REC")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@ForceDiscriminator
@DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING)
public abstract class PageConfigRec implements Serializable {
//此字段标记不同子类,在对子类进行查询操作时不需要加上此属性的相等条件
@Column(name = "CATEGORY", nullable = true, length = 32, insertable = false, updatable = false)
private String subClsType;
private String name;
//get ,set methods
}
子类:
@Entity
@DiscriminatorValue("FIELD")
public class PageFieldConfigRec extends PageConfigRec implements IPageElementConfig, Serializable {
private static final long serialVersionUID = 1L;
}
例如:hql: from PageFieldConfigRec where name = ? ;
对应sql:select * from COMP_PAGE_CONFIG_REC where CATEGORY='FIELD' and name = ?;
其中CATEGORY='FIELD' 是hibernate 自动加上的。
这种场景应用于父实体类(抽象)有N个子类,但都对应一张表,此表中有一个字段标记该表的此部分记录属于不同子类,
即Hql对不同子类进行操作时,其实是对表的一部分(与此类对应)进行操作。
父类:
@Entity
@Table(name = "COMP_PAGE_CONFIG_REC")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@ForceDiscriminator
@DiscriminatorColumn(name = "CATEGORY", discriminatorType = DiscriminatorType.STRING)
public abstract class PageConfigRec implements Serializable {
//此字段标记不同子类,在对子类进行查询操作时不需要加上此属性的相等条件
@Column(name = "CATEGORY", nullable = true, length = 32, insertable = false, updatable = false)
private String subClsType;
private String name;
//get ,set methods
}
子类:
@Entity
@DiscriminatorValue("FIELD")
public class PageFieldConfigRec extends PageConfigRec implements IPageElementConfig, Serializable {
private static final long serialVersionUID = 1L;
}
例如:hql: from PageFieldConfigRec where name = ? ;
对应sql:select * from COMP_PAGE_CONFIG_REC where CATEGORY='FIELD' and name = ?;
其中CATEGORY='FIELD' 是hibernate 自动加上的。
这种场景应用于父实体类(抽象)有N个子类,但都对应一张表,此表中有一个字段标记该表的此部分记录属于不同子类,
即Hql对不同子类进行操作时,其实是对表的一部分(与此类对应)进行操作。