• JPA中的主键生成策略


    通过annotation(注解)来映射hibernate实体的,基于annotationhibernate主键标识为@Id, 其生成规则由@GeneratedValue设定的.这里的@id@GeneratedValue都是JPA的标准用法。

    JPA提供的四种标准用法为TABLE,SEQUENCE,IDENTITY,AUTO

    具体说明如下:

    IDENTITY:主键由数据库自动生成(主要是自动增长型)

    用法:

        @Id  
        @GeneratedValue(strategy = GenerationType.IDENTITY) 
        private Long custId;

    SEQUENCE:根据底层数据库的序列来生成主键,条件是数据库支持序列。

    用法:

     @Id  
        @GeneratedValue(strategy = GenerationType.SEQUENCE,generator="payablemoney_seq")  
        @SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")  
    private Long custId;
    
    
        //@SequenceGenerator源码中的定义
        @Target({TYPE, METHOD, FIELD})   
        @Retention(RUNTIME)  
        public @interface SequenceGenerator {  
           //表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中
           String name();  
           //属性表示生成策略用到的数据库序列名称。
           String sequenceName() default "";  
           //表示主键初识值,默认为0
           int initialValue() default 0;  
           //表示每次主键值增加的大小,例如设置1,则表示每次插入新记录后自动加1,默认为50
           int allocationSize() default 50;  
        }

    AUTO:主键由程序控制

    用法:

     @Id  
     @GeneratedValue(strategy = GenerationType.AUTO)  
     private Long custId;

    TABLE:使用一个特定的数据库表格来保存主键

    用法:

        @Id  
        @GeneratedValue(strategy = GenerationType.TABLE, generator="payablemoney_gen")  
        @TableGenerator(name = "pk_gen",  
            table="tb_generator",  
            pkColumnName="gen_name",  
            valueColumnName="gen_value",  
            pkColumnValue="PAYABLEMOENY_PK",  
            allocationSize=1  
        ) 
        private Long custId;

    //@TableGenerator的定义:

        @Target({TYPE, METHOD, FIELD})   

        @Retention(RUNTIME)  

        public @interface TableGenerator {  

          //表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“generator”值中

          String name();  

          //表示表生成策略所持久化的表名,例如,这里表使用的是数据库中的“tb_generator”

          String table() default "";  

          //catalogschema具体指定表所在的目录名或是数据库名

          String catalog() default "";  

          String schema() default "";  

          //属性的值表示在持久化表中,该主键生成策略所对应键值的名称。例如在“tb_generator”中将“gen_name”作为主键的键值

          String pkColumnName() default "";  

          //属性的值表示在持久化表中,该主键当前所生成的值,它的值将会随着每次创建累加。例如,在“tb_generator”中将“gen_value”作为主键的值

          String valueColumnName() default "";  

          //属性的值表示在持久化表中,该生成策略所对应的主键。例如在“tb_generator”表中,将“gen_name”的值为“CUSTOMER_PK”

          String pkColumnValue() default "";  

          //表示主键初识值,默认为0

          int initialValue() default 0;  

          //表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50

          int allocationSize() default 50;  

          UniqueConstraint[] uniqueConstraints() default {};  

        }

     

        //这里应用表tb_generator,定义为 :

        CREATE TABLE  tb_generator (  

          id NUMBER NOT NULL,  

          gen_name VARCHAR2(255) NOT NULL,  

          gen_value NUMBER NOT NULL,  

          PRIMARY KEY(id)  

        )

  • 相关阅读:
    Java学习-068-多线程01:继承 Thread 类
    Linux-026-Centos Nginx 配置 pid 文件路径解决 service nginx status 提示:Can't open PID file /var/run/nginx.pid (yet?) after start: No such file or directory
    Linux-025-Centos Nginx 代理配置:同一端口代理不同服务
    Linux-024-Centos Nginx 代理配置:不同端口代理不同服务
    Linux-023-Centos Nginx Lua 脚本三种基本引用方式示例
    Linux-022-Centos Nginx 配置环境变量,常规命令
    Linux-021-Centos Nginx 配置服务管理,并设置开机启动
    Linux-020-Centos Shell 安装 Nginx 1.18.0
    Linux-019-Centos Shell 安装 Nginx 后启动时提示找不到Lua模块的libluajit-5.1.so.2文件,具体提示信息:./nginx: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
    PySe-021-requests 使用 proxies 参数实现通过代理访问目标地址
  • 原文地址:https://www.cnblogs.com/yangzhixue/p/12348552.html
Copyright © 2020-2023  润新知