Spring Data R2DBC PostgreSQL 不使用 UUID @Id 保存新记录

Ric*_*ick 6 java postgresql spring-data-r2dbc

我有一个简单的实体,由两个 UUID 组成:

\n
@Table("library")\npublic class LibraryDao {\n    @Id\n    private UUID id;\n    @NonNull\n    private UUID ownerId;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我在 PostgreSQL 中有一个对应的表:

\n
CREATE TABLE IF NOT EXISTS library (id UUID PRIMARY KEY, owner_id UUID NOT NULL);\n
Run Code Online (Sandbox Code Playgroud)\n

我正在使用正确的 R2DBC 驱动程序(io.r2dbc:r2dbc-postgresqlorg.postgresql:postgresql)。

\n

至此,一切正常。我的应用程序运行。但是\xe2\x80\xa6

\n

因为 PostgreSQL 至少根据文档 \xe2\x80\x93 没有 UUID 自动生成功能,所以我在创建新实例时设置了 id LibraryDao

\n

但是,当我save在存储库中调用该方法时,出现异常:Failed to update table [library]. Row with Id [0ed4d7c0-871a-4473-8997-4c9c1ec67a00] does not exist.

\n

似乎save被解释为,如果它不存在则update不会回退。insert

\n

我该如何将新记录插入数据库?

\n

Ric*_*ick 4

尽管有 PostgreSQL 文档,但还是有一种方法可以使用 pgcrypto 扩展(适用于 v4 UUID)自动生成 UUID。(基于使用 pgAdmin GUI 的过程。)

在查询工具中:

  • select * from pg_extension并检查 pgcrypto 是否未列出。
  • create extension pgcrypto安装它;它带有默认安装。

然后,将列定义更改为... id UUID PRIMARY KEY DEFAULT gen_random_uuid(), ...

它有效。