常用的JPA标记 hibernate annotation 参考
JoinTable
JoinTable在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 { ... }