数据库系列--postgreSQL序列与id自增长
程序员文章站
2022-05-03 19:17:49
...
一、问题背景
将entity实体对象使用JPA持久化persist到数据库时,需要设置id的自增长方式。代码片段如下:
(postgreSQL9.9.5)
@Id
@SequenceGenerator(name = "engine_info_seq", sequenceName = "engine_info_id_seq", allocationSize = 1)
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "engine_info_seq")
private Integer id;
然而并无法实现id的自增长。
原因很简单,无法找到名为engine_info_id_seq的SEQUENCE(序列)。
二、序列与id自增长的关系
个人理解:
所谓的自增长,实际上是将手动添加id的任务交给了序列SEQUENCE,定义好SEQUENCE的总长度,启始值,每次增长的幅度等等。
下面是SEQUENCE的生成代码:
CREATE SEQUENCE public.engine_info_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 126
CACHE 1;
ALTER TABLE public.engine_info_id_seq
OWNER TO postgres;
三、实现id自增长的完整步骤
在创建id字段时,需要将id的类型设置为”serial”,会自动生成相应的序列。
如下:
序列代码:
CREATE SEQUENCE public.engine_info_id_seq
INCREMENT 1
MINVALUE 1
MAXVALUE 9223372036854775807
START 126
CACHE 1;
ALTER TABLE public.engine_info_id_seq
OWNER TO postgres;