SpringBoot JPA关于主键策略:


JPA通过@GeneratedValue注解配置主键的生成策略,通过strategy属性选择预定的4种策略之一。

  1. GenerationType.AUTO:默认选项,由程序自动选择一个最适合底层数据库的主键生成策略;
  2. GenerationType.IDENTITY:表自增长字段,Oracle不支持这种方式。
  3. 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;
  1. 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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM