这三个注解用于hibernate多表同时保存使用,多表分为主子表形式
-
Inheritance
必须定义其属性strategy- strategy=InheritanceType.SINGLE_TABLE 将父类和所有子类集合,存在一张表中,全部创建新的字段
- strategy=InheritanceType.TABLE_PER_CLASS 每一个类创建一个表,这些表相互独立
- strategy=InheritanceType.JOINED 将父类、子类分别存放在不同的表中,并且建立相应的外键,以确定相互之间的关系
-
DiscriminatorColumn
只能用在@Inheritance( strategy=InheritanceType.SINGLE_TABLE或JOINED下)
都有默认值,所以属性均可选,源码及解释如下:
/**
* <pre>
* Example:
* @Entity
* @Table(name="CUST")
* @Inheritance(strategy=SINGLE_TABLE)
* @DiscriminatorColumn(name="DISC", discriminatorType=STRING, length=20)
* public class Customer { ... }
* @Entity
* public class ValuedCustomer extends Customer { ... }
* </pre>
*/
public @interface DiscriminatorColumn {
/**
* (Optional) The name of column to be used for the discriminator.
* 对应列名
*/
String name() default "DTYPE";
/**
* (Optional) The type of object/column to use as a class discriminator.
* Defaults to {@link DiscriminatorType#STRING DiscriminatorType.STRING}.
* 对应列的字段类型,DiscriminatorType有STRING、CHAR、INTEGER
*/
DiscriminatorType discriminatorType() default STRING;
/**
* (Optional) The SQL fragment that is used when generating the DDL
* for the discriminator column.
* <p> Defaults to the provider-generated SQL to create a column
* of the specified discriminator type.
* DDL生成时使用的SQL片段,默认为提供程序生成的SQL来创建列
*/
String columnDefinition() default "";
/**
* (Optional) The column length for String-based discriminator types.
* Ignored for other discriminator types.
* 字符串类型要求的长度,其他类型此项请忽略
*/
int length() default 31;
}
- DiscriminatorValue
插入的值,直接使用即可
例
用途:hibernate映射时,采用主从表关联形式映射,父类代表主表,子类注解代表将向主表插入数据库的数据值
- 父类
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="a_type", discriminatorType=DiscriminatorType.STRING, length=30) - 子类
@DiscriminatorValue("我是值")
表中有一列a_type,类型为字符串,长度30,操作插入的值为“我是值”
网友评论