@GeneratedValue和@SequenceGenerator是JPA标准注解,GeneratedValue用来定义主键生成策略,SequenceGenerator用来定义一个生成主键的序列;它们要联合使用才有效。
下面介绍一个使用Oracle序列生成主键的方法:
数据库中先定义一个Oracle序列,如名字为SEQ_BDF2_USER
在Entity实体类中通过使用注解@SequenceGenerator声明定义好的序列SEQ_BDF2_USER,名称为ID_SEQ。有两种声明方法,可以在类前面进行声明,也可以在字段上进行声明,如图:
在主键字段id上使用注解GeneratedValue定义主键生成策略为序列,并引用声明好的序列ID_SEQ。如图:
保存User对象时,只需为除主键外的其它字段赋值,进行保存即可,保存后主键也采用序列自动赋值了。
注意事项
-
类上面声明序列可以在各个字段使用
-
字段上声明的序列只能在当前字段使用
-
@SequenceGenerator中allocationSize属性用来定义递增值
-
如果主键为随机生成的,请检查是否定义allocationSize属性
-
如果是其它数据库请修改主键策略GenerationType