0%

jpa主键生成策略

文章字数:286,阅读全文大约需要1分钟

主键除了自己设置,还有很多种方法可以让数据库自动生成。将注解写在实体类属性上就可以获得相应功能

注解

  • @GeneratorValue注解—-JPA通用策略生成器
  1. 参数GenerationType
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public enum GenerationType{    

    TABLE, //特定表生成 见3

    SEQUENCE, //数据库底层 见4

    IDENTITY, //自增序列生成

    AUTO //默认,自动选择

    }
  2. 参数generator:其它生成器的名字,配合@GenericGenerator使用
    1
    2
    3
    @GeneratedValue(generator="system-uuid")//关联system-uuid
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    //system-uuid策略是uuid 还可以是uuid.hex(16进制)共12种策略
  3. TABLE生成策略使用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    @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 //累加值
    )
  4. SEQUENCE使用

    部分数据库(Oracle,PostgreSQL,DB2)支持序列对象,因为其不支持主键自增,所以这是自增的补充方法

    1
    2
    3
    @Id  
    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="fendo_seq")
    @SequenceGenerator(name="fendo_seq", sequenceName="seq_name")
  • @GenericGenerator注解—-自定义主键生成策略
    可选部分
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    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);