美文网首页
SpringBoot JPA关于主键策略:

SpringBoot JPA关于主键策略:

作者: 周_0717 | 来源:发表于2020-02-21 23:26 被阅读0次

    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

    相关文章

      网友评论

          本文标题:SpringBoot JPA关于主键策略:

          本文链接:https://www.haomeiwen.com/subject/uiqkqhtx.html