gpt4 book ai didi

spring - 如何将 [DDL] 从生成类型标识迁移到 postgres db 的生成类型序列

转载 作者:行者123 更新时间:2023-12-04 09:33:58 24 4
gpt4 key购买 nike

截至目前,我正在使用

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
DB中生成的序列是这样的:
CREATE SEQUENCE public.table_name_id_seq
START WITH 1
INCREMENT BY 1
NO MINVALUE
NO MAXVALUE
CACHE 1;

ALTER SEQUENCE public.table_name_id_seq OWNED BY public.table_name.id;

ALTER TABLE ONLY public.table_name ALTER COLUMN id SET DEFAULT``nextval('public.table_name_id_seq'::regclass);
或在定义本身的某些地方:
CREATE TABLE "public.table_name" (
"id" int8 NOT NULL DEFAULT nextval('table_name_id_seq'::regclass),
"some_column" varchar(255),
PRIMARY KEY ("id")
);
我使用 hibernate 作为 JPA 提供程序,我需要启用插入和更新批处理,因此我想将生成类型更改为 SEQUENCE来自 IDENTITY .
更改为生成类型序列 [在 hibernate 中] 并使用旧序列 [postgres] 后,我看到生成了奇怪的 id。这不是预期的行为。
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "table_name_id_seq ")
private Long id;
enter image description here
以黄色突出显示的 id 是在使用生成类型序列后创建的。我期待 23 之后的 id 是 24 而不是 -22。
我怎样才能解决这个问题?我怎样才能顺利地从 IDENTITY 转换到 SEQUENCE?什么是正确的 DDL?

最佳答案

回答你问题的这一部分:

How can I smoothly shift from IDENTITY to SEQUENCE? What is the proper DDL?


你应该做以下事情:
  • table_name.id 中删除默认值栏目:

  • alter table only table_name
    alter column id drop default;
  • 更正您对 id 的映射字段:

  • @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "my_generator")
    @SequenceGenerator(name = "my_generator", sequenceName = "table_name_id_seq", allocationSize = 1)
    private Long id;
    请注意 allocationSize应该等于 INCREMENT BY您的序列定义。

    关于spring - 如何将 [DDL] 从生成类型标识迁移到 postgres db 的生成类型序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62681497/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com