主键除了自己设置,还有很多种方法可以让数据库自动生成。将注解写在实体类属性上就可以获得相应功能
注解
-
@GeneratorValue
注解----JPA通用策略生成器
- 参数GenerationType
public enum GenerationType{
TABLE, //特定表生成 见3
SEQUENCE, //数据库底层 见4
IDENTITY, //自增序列生成
AUTO //默认,自动选择
}
- 参数generator:其它生成器的名字,配合
@GenericGenerator
使用
@GeneratedValue(generator="system-uuid")//关联system-uuid
@GenericGenerator(name="system-uuid", strategy = "uuid")
//system-uuid策略是uuid 还可以是uuid.hex(16进制)共12种策略
- TABLE生成策略使用
@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.TABLE,generator="table_gen")
@TableGenerator(
name = "table_gen",
table="fendo_generator",
pkColumnName="seq_name", //指定主键的名字
pkColumnValue="fendos", //指定下次插入主键时使用默认的值
valueColumnName="seq_id", //该主键当前所生成的值,它的值将会随着每次创建累加
initialValue = 1, //初始化值
allocationSize=1 //累加值
)
- SEQUENCE使用
部分数据库(Oracle,PostgreSQL,DB2)支持序列对象,因为其不支持主键自增,所以这是自增的补充方法
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="fendo_seq")
@SequenceGenerator(name="fendo_seq", sequenceName="seq_name")
-
@GenericGenerator
注解----自定义主键生成策略
可选部分
GENERATORS.put("uuid", UUIDHexGenerator.class);
GENERATORS.put("hilo", TableHiLoGenerator.class);
GENERATORS.put("assigned", Assigned.class);
GENERATORS.put("identity", IdentityGenerator.class);
GENERATORS.put("select", SelectGenerator.class);
GENERATORS.put("sequence", SequenceGenerator.class);
GENERATORS.put("seqhilo", SequenceHiLoGenerator.class);
GENERATORS.put("increment", IncrementGenerator.class);
GENERATORS.put("foreign", ForeignGenerator.class);
GENERATORS.put("guid", GUIDGenerator.class);
GENERATORS.put("uuid.hex", UUIDHexGenerator.class); //uuid.hex is deprecated
GENERATORS.put("sequence-identity", SequenceIdentityGenerator.class);