1 問題背景
將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(序列)。
2 序列與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;
3 實現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;