JPA主键生成策略TABLE,SEQUENCE,IDENTITY,AUTO
1、1, IDENTITY:主键由数据库自动生成(主要是自动增长型)用法:@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLong custId;
2、2, SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。用法:@Id@GeneratedValue(strategy=GenerationType.SEQUENCE,generator="payablemoney_seq")@SequenceGenerator(name="payablemoney_seq",sequenceName="seq_payment")说明:@SequenceGenerator源码中的定义@Target({TYPE,METHOD,FIELD})@Retention(RUNTIME)public@interfaceSequenceGenerator{Stringname(); StringsequenceName()default""; intinitialValue()default0; intallocationSize()default50;}name:表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。 sequenceName:属性表示生成策略用到的数据库序列名称。 initialValue:表示主键初识值,默认为0。 allocationSize:表示每次主键值增加的大小,例如设置1,则表示每次插入新记录后自动加1,默认为50。
3、3, AUTO:主键由程序控制。用法:@Id@GeneratedValue(strategy=GenerationType.AUTO)
4、4,TAB雉搽妤粲LE:使用一个特定的数据库表格来保存主键(了解)用法:@Id@GeneratedValue(strategy=GenerationType.TA蚱澄堆别BLE,generator="payablemoney_gen")@TableGenerator(name="pk_gen",table="tb_generator",pkColumnName="gen_name",valueColumnName="gen_value",pkColumnValue="PAYABLEMOENY_PK",allocationSize=1)这里应用表tb_generator,定义为:CREATETABLEtb_generator(idNUMBERNOTNULL,gen_nameVARCHAR2(255)NOTNULL,gen_valueNUMBERNOTNULL,PRIMARYKEY(id))插入纪录,供生成主键使用:INSERTINTOtb_generator(id,gen_name,gen_value)VALUES(1,PAYABLEMOENY_PK',1);在主键生成后,这条纪录的value值,按allocationSize递增。@TableGenerator的定义:@Target({TYPE,METHOD,FIELD})@Retention(RUNTIME)public@interfaceTableGenerator{Stringname();Stringtable()default"";Stringcatalog()default"";Stringschema()default"";StringpkColumnName()default"";StringvalueColumnName()default"";StringpkColumnValue()default"";intinitialValue()default0;intallocationSize()default50;UniqueConstraint[]uniqueConstraints()default{};}其中属性说明: name:表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中。 table:表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”。 catalog和schema:具体指定表所在的目录名或是数据库名。 pkColumnName:属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值 valueColumnName:属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值 pkColumnValue:属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”。 initialValue:表示主键初识值,默认为0。 allocationSize:表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。 UniqueConstraint:与@Table标记中的用法类似。