Annotation注解介绍
Table
Table用来定义entity主表的name,catalog,schema等属性。
元数据属性说明:
name: 表名 catalog: 对应关系数据库中的catalog schema:对应关系数据库中的schema UniqueConstraints:定义一个UniqueConstraint数组,指定需要建唯一约束的列 JoinTableJoinTable在many-to-many关系的所有者一边定义。如果没有定义JoinTable,使用JoinTable的默认值。
元数据属性说明:
table:这个join table的Table定义。 joinColumns:定义指向所有者主表的外键列,数据类型是JoinColumn数组。 inverseJoinColumns:定义指向非所有者主表的外键列,数据类型是JoinColumn数组。下面的代码定义了一个连接表CUST和PHONE的join table。join table的表名是CUST_PHONE,包含两个外键,一个外键是CUST_ID,指向表CUST的主键ID,另一个外键是PHONE_ID,指向表PHONE的主键ID。
@JoinTable( table=@Table(name=CUST_PHONE), joinColumns=@JoinColumn(name="CUST_ID", referencedColumnName="ID"), inverseJoinColumns=@JoinColumn(name="PHONE_ID", referencedColumnName="ID") )TableGenerator
TableGenerator定义一个主键值生成器,在Id这个元数据的generate=TABLE时,generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。
生成器是为多个实体类提供连续的ID值的表,每一行为一个类提供ID值,ID值通常是整数。
元数据属性说明:
name:生成器的唯一名字,可以被Id元数据使用。 table:生成器用来存储id值的Table定义。 pkColumnName:生成器表的主键名称。 valueColumnName:生成器表的ID值的列名称。 pkColumnValue:生成器表中的一行数据的主键值。 initialValue:id值的初始值。 allocationSize:id值的增量。下面的代码定义了两个生成器empGen和addressGen,生成器的表是ID_GEN。
@Entity public class Employee { ... @TableGenerator(name="empGen", table=@Table(name="ID_GEN"), pkColumnName="GEN_KEY", valueColumnName="GEN_VALUE", pkColumnValue="EMP_ID", allocationSize=1) @Id(generate=TABLE, generator="empGen") public int id; ... } @Entity public class Address { ... @TableGenerator(name="addressGen", table=@Table(name="ID_GEN"), pkColumnValue="ADDR_ID") @Id(generate=TABLE, generator="addressGen") public int id; ... }SequenceGenerator
SequenceGenerator定义一个主键值生成器,在Id这个元数据的generator属性中可以使用生成器的名字。生成器可以在类、方法或者属性上定义。生成器是数据库支持的sequence对象。
元数据属性说明:
name:生成器的唯一名字,可以被Id元数据使用。 sequenceName:数据库中,sequence对象的名称。如果不指定,会使用提供商指定的默认名称。 initialValue:id值的初始值。 allocationSize:id值的增量。下面的代码定义了一个使用提供商默认名称的sequence生成器。
@SequenceGenerator(name="EMP_SEQ", allocationSize=25)DiscriminatorColumn
DiscriminatorColumn定义在使用SINGLE_TABLE或JOINED继承策略的表中区别不继承层次的列。
元数据属性说明:
name:column的名字。默认值为TYPE。 columnDefinition:生成DDL的sql片断。 length:String类型的column的长度,其他类型使用默认值10。下面的代码定义了一个列名为DISC,长度为20的String类型的区别列。
@Entity @Table(name="CUST") @Inheritance(strategy=SINGLE_TABLE, discriminatorType=STRING, discriminatorValue="CUSTOMER") @DiscriminatorColumn(name="DISC", length=20) public class Customer { ... }