JPA通过@GeneratedValue注解配置主键的生成策略,通过strategy属性选择预定的4种策略之一。
- GenerationType.AUTO:默认选项,由程序自动选择一个最适合底层数据库的主键生成策略;
- GenerationType.IDENTITY:表自增长字段,Oracle不支持这种方式。
- GenerationType.SEQUENCE:通过序列产生主键,该策略一般与注解@SequenceGenerator一起使用,根据注解内容创建一个序列或使用一个现有的序列,如果不指定序列,则会自动生成一个序列SEQ_GEN_SEQUENCE。注意:MySQL不支持这种方式。
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "testSeq")
@SequenceGenerator(name = "testSeq", initialValue = 1, allocationSize = 1, sequenceName = "TEST_SEQUENCE"
private Long id;
- GenerationType.TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。该策略常与@TableGenerator一同使用。可以在主键字段或属性或者实体类上使用@TableGenerator,指定生成或使用一张现有的序列表,如果不指定序列表,则会生成一张默认的序列表,表中的列名(SEQ_NAME,SEQ_COUNT)也是自动生成。序列表一般只包含两个字段:第一个字段是策略名称,第二个字段是该关系表的最大序号,它会随着数据的插入逐渐累加。该策略的好处就是不依赖于外部环境和数据库的具体实现,便于移植,但由于其不能充分利用数据库的特性,所以不会优先使用。
@Id
@GeneratedValue(strategy = GenerationType.TABLE, generator = "testGenerator")
@TableGenerator(name = "testGenerator", allocationSize = 1, table = "test_table", pkColumnName = "test_id",
valueColumnName = "test_count")
private Long id;
2020-02-21
网友评论