postgresql - 如何使用 UUID 作为 Postgresql 中的外键与休眠
问题描述
我试图使用 JPA 来坚持使用一组电子邮件的人,但我无法到达那里。
我得到了这个例外 -
引起:org.postgresql.util.PSQLException:错误:关系“人”不存在
我有一个“人”和该人的一组“电子邮件”。我究竟做错了什么?
我的代码如下
创作桌
CREATE TABLE "Person" (
publicId uuid DEFAULT uuid_generate_v4 (),
name VARCHAR(64) NOT NULL
PRIMARY KEY (publicId)
);
CREATE TABLE "Email" (
emailId uuid DEFAULT uuid_generate_v4 (),
email VARCHAR(64) NOT NULL,
PRIMARY KEY (emailId),
FOREIGN KEY (person) REFERENCES Person (publicId)
);
实体
人
@Id
@Column(name = "publicId")
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
@Type(type="org.hibernate.type.PostgresUUIDType")
private UUID publicId;
@NotBlank
@Column
private String name;
@OneToMany(mappedBy="person")
private Set<Email> emails;
电子邮件
@Id
@Column(name = "emailId")
@GeneratedValue(generator = "UUID")
@GenericGenerator(name = "UUID", strategy = "org.hibernate.id.UUIDGenerator")
@Type(type="org.hibernate.type.PostgresUUIDType")
private UUID emailId;
@NotBlank
@Column
private String email;
@ManyToOne
@JoinColumn(name="publicId", nullable=false)
private Person person;
和我的 DTO
DtoPersonCreate
@NotBlank
@VerifiedName
private String name;
@NotEmpty(message = "Input email list cannot be empty.")
private Set<DtoEmail> emails;
DtoEmail
@NotBlank
private String email;
解决方案
您的电子邮件表有几个问题。首先,它不包含用于标识 Person 表中相关行的列。其次,因为您的表是用双引号(“)创建的,所以对它的每个引用也必须用双引号引起来。由于您引用的表不是双引号,所以它不存在。即表 Person 与表“Person”不同。
解决方案:添加列publicId并双引号引用的表。(如果可以的话,最好去掉双引号。)
CREATE TABLE "Email" (
emailId uuid DEFAULT uuid_generate_v4 (),
email VARCHAR(64) NOT NULL,
publicId uuid,
PRIMARY KEY (emailId),
FOREIGN KEY (publicId) REFERENCES "Person" (publicId)
);
推荐阅读
- c - 如何使用 C 中的套接字编程向客户端发送 HTTP 内容长度标头
- android-studio - 无法在 android studio 中正确导入 psd 文件
- mysql - 在 Gorm 查询中为主表的名称起别名
- html - 在移动视图上,仅在特定页面(潜在客户表单)上将汉堡菜单项替换为电话号码
- php - Laravel file storage SSL_shutdown failed on ftp driver
- flutter - 插件 `geocoder` 使用了已弃用的 Android 嵌入版本
- google-chrome - Is it possible to implement a custom request copy browser extension
- javascript - How to get the objects from a request url module function to another function
- rust - 用 Rust 创建周期性任务的最佳方法是什么?
- ansible - ECS 集群的 Ansible 服务发现